There's some rich history here. During the SFRY, the system required the following format: xx * nnn - nnn, where xx was the city code, * was the communist red star, same as on the flag, and the rest was anywhere between four and six digits (2+2, 2+3, 3+3), except police cars which had M-nnnnn, white on dark blue. For truck trailers, the city code went last, i.e. nnn-nnn * xx (which is still in effect). Light trailers, towed by a car, would get a copy of the car's tags.
The colors varied. The regular was black on white. Any company-owned car, however, had white on red (with red star on red). Police cars had white on blue. Tractors had white on green, with the municipality name (not code) and a 4-5 digit number; tractor trailers had the same, but not the same number as the tractor.
Then came the FRY (1992-2006) when they reissued all the tags with the same system, just replacing the red star with a small blue-white-red flag. Then Serbia issued its own tags, still keeping the same system but with its own flag (without the coat of arms), red-blue-white. Then in 2011 it became obvious that Belgrade may soon cross the border of six digits, which would make the tags unreadable. The new line of tags now reads xx * nnn - yy, where xx is the city code as it always was (although some smaller cities now got their own codes which didn't exist previously), nnn is a three digit code, and yy is a two character code. These two are from a combined character set, which includes the X, Y, W, Q which don't exist in serbian, and Š, Ž, Ć, Č, Đ which don't exist in most of other countries. This means there is a 31 character set, whch packs 961 combinations in two character positions, giving a maximum of 961000 theoretical tags per city, not bad considering that it's only 5 positions long. Still wondering what will they do with Belgrade, as it has already eaten up half of the space in just two years.
Introduction of local characters creates some confusion when parking is paid via cell phone - many older phones don't support them, or the users didn't even bother to find out whether they do, and even so, in most cities the software receiving SMS with which the parking is paid also didn't support them. Maybe now it does, or it's OK if you substitute Z for Ž - don't know, my car is among the 70% of those without any of those five. The public hubbub at the time these tags were introduced did not go against the parking service or cell phone operators - it went against the government for using these characters in the first place. Engrbian language mentality at its best.