About this tool
Cambodian plates have carried a class number since the format changed in 2004: one digit, one or two Latin letters and four digits, with the province printed in Khmer above and in English below. This tool reads that number and tells you what the leading digit means, which plate colour goes with it, and which part of the string is the series and which is the serial. Type a plate such as 2AB-1234, or photograph one and let the scanner read it, and the result appears as you type with a preview of the plate in its own colours. It is for a used-car buyer checking whether a vehicle is registered as private or commercial, a driver trying to work out what the plate in front of them belongs to, a parking attendant sorting vehicles by class, or a visitor who wants to understand the numbering. It decodes the class and the format only. It cannot tell you the province, the owner, the registration status or whether a plate is genuine, because none of that is encoded in the number.
How it works
The decoding is `decodePlate` in `web/lib/license-plate/decoder.ts`. It uppercases the input, collapses whitespace, and matches it against `^(\d)[-_\s]?([A-Z]{1,2})[-_\s]?(\d{1,4})$`, so a dash, an underscore, a space or nothing at all between the parts is accepted. The first captured digit is looked up in `VEHICLE_CLASSES`, which carries the English and Khmer name plus the body and text colours for classes 1, 2, 3, 4, 5, 7 and 9; a digit outside that set returns no result rather than a guess. The result object also carries the series letters, the serial number and a format label, and the client renders a plate preview from the same colours. The scan button uses `plate-scanner.tsx`: it downscales the image to at most 1280 pixels on the long edge, runs Tesseract.js with the English model only because plate text is Latin and digits, then extracts the first digit-letter-digits run and normalises it to `2AB-1234` before filling the input, which you can still edit.
Use cases
- A used-car buyer checking whether a plate belongs to a private car or a commercial vehicle
- A driver working out what the plate on the vehicle ahead is registered as
- A parking attendant sorting vehicles by class for a fee schedule
- A tourist decoding a plate they have photographed and want to understand
- A vehicle owner confirming that their plate matches the class printed on the registration card
- A journalist or student checking the class digit before describing a vehicle in a story
- A fleet clerk typing a plate from a photo and checking the class before filing it
Frequently asked questions
What does the first digit on the plate mean?
It is a vehicle class, not a province. 1 is a motorcycle, 2 a private automobile of one to seven seats, 3 a private automobile with more than seven seats, 4 an agricultural vehicle, 5 an engineering vehicle, 7 a truck trailer and 9 a special vehicle. Digits 6 and 8 are not assigned to those classes, so a plate beginning with either returns no result here rather than a guess.
Can I find the province from the plate number?
No. The province is printed on the plate as text, in Khmer at the top and in English at the bottom, but it is not encoded in the number. Two plates with the same digits can come from different provinces. The only way to know is to read the printed name on the plate itself, which is also why a photo is more useful than a typed number for this question.
What is the standard plate format?
One class digit, one or two Latin letters, then four digits from 0001 to 9999, with the province name above and below. That format has been issued since 1 April 2004, when the Ministry of Public Works and Transport replaced the older 1994 to 2004 style. The tool also accepts one to three digits in the serial, so a partially typed or partially read plate still decodes rather than being rejected.
What do the plate colours mean?
Colour follows the class. White with blue text for motorcycles and private cars of up to seven seats, blue with white text for larger private vehicles, green with yellow text for agricultural vehicles, orange with black text for engineering vehicles, and white with black text for truck trailers and special vehicles. The preview on this page uses those pairs, so the colours you see should match the plate in front of you.
Why does the format field always say standard?
Because the decoder only ever sets that one value. The source defines labels for the old, diplomatic, police, temporary and state formats, but nothing in `decodePlate` selects them: any plate that matches the pattern is labelled standard and anything that does not match returns no result at all. Treat the format line as confirmation that the string fits the post-2004 pattern, not as a classification.
Why does my plate return nothing?
Three common reasons. The leading digit may be 6 or 8, which are not in the class table. The string may not match the pattern, for example because it carries a Khmer prefix or a suffix such as a province abbreviation. Or it may be a plate type that does not follow the class-number scheme at all, such as a state plate marked with the Khmer word for state, which this tool does not decode.
How does the scan feature work?
It reads the Latin letters and digits with Tesseract.js using the English model only, because the number itself is not in Khmer script. The image is downscaled to 1280 pixels on the long edge first, which keeps a phone photo fast, and the file limit is 10 MB. After scanning, the detected plate is written into the input box as text and you can correct it before trusting the result; a blurry or angled photo is the usual cause of a wrong read.
Are there special plate types it does not handle?
Yes. Government vehicles carry state plates marked with a Khmer prefix, embassy and consulate vehicles have their own colours, police plates are red, royal vehicles use a distinct scheme and temporary plates are issued pending registration. None of those follow the digit-letter-digits pattern, so this tool neither decodes them nor claims to. It covers the ordinary civilian plate introduced in 2004 and nothing else.
Data and accuracy
The class table, the colours and the parser are all in `web/lib/license-plate/decoder.ts` — `VEHICLE_CLASSES`, `PLATE_COLORS`, `TEXT_COLORS` and `decodePlate`. The scan path is `plate-scanner.tsx`, which runs Tesseract.js with the English model after downscaling to 1280 pixels. The class numbering and the 2004 format come from the Ministry of Public Works and Transport plate scheme; the class-to-colour mapping used here matches the published table. Content reviewed on 21 October 2026.
Sources
- Vehicle registration plates of Cambodia — the class table, colours and the 2004 format — Wikipedia
- Prakas No. 262 on vehicle registration, plate issue and removal from the register (27 August 2019) — Ministry of Public Works and Transport
- Number plates become more readable — the 2004 introduction of the new plate style, province names and class code — The Phnom Penh Post
Content last reviewed 21 October 2026