Archive for the ‘projects’ Category

Singapore Vehicle License Plate Check Character Calculator & Validator

November 23, 2009

Here’s something extremely obscure!

A few years ago I spent a lot of time in Singapore and, as always, wanted to understand their system of vehicle registration places (license plates).

The basic system is easy to understand.Wikipedia has some basic documentation here.

Here’s an illustration from Wikipedia of a current private vehicle plate design (front and rear).

It’s British heritage is obvious but the Singapore Government made an enhancement that’s unusual. Almost every license plate (apart from military and diplomatic plates) has an alphabetic character at the end. It’s not a “year letter” like the old British system but a “check character”.

The check character is calculated from the values of the other characters in the plate and serves as a validator. If you make a mistake recording the plate the check character will be wrong.

As far as I know the Singapore Government does not document the check character generation algorithm for the public. I had a big database of Singapore license plates I’d observed and back in 2002 I tried to reverse-engineer the algorithm.

My mathematics isn’t the best so I got some help from somebody on the Internet. He quickly helped me understand the system and I wrote some Microsoft Visual Basic code to calculate check characters and to validate them.

I published a Microsoft Excel spreadsheet with the code on my web site, but I closed it down in 2007 as an economy measure. When I discovered Scribd I decided to re-publish it as a service to anyone else who’s interested in the subject.

In the spirit of open-source I placed the code in the public domain under a GNU General Public License. I don’t know how many people are interested in this obscure subject but if you are, you’re welcome to the code.

After the break is an embedded form of the spreadsheet from Scribd. Don’t worry about the “VALUE” errors in the preview – Scribd rendered the preview incorrectly.

I am not a great Visual Basic coder so I’m sure many people can improve the code. I’ve tested it on hundreds of Singapore plates of all types including the new “SMB” bus plates and it works. But of course that isn’t a formal proof of correctness. As the license says – no warranty!

When I wrote the code I put lists of validated registration plates for the various classes of Singapore buses on the Singapore Buses Discussion Board on Yahoo Groups. They’re still there in the “Files” section over seven years later.

(more…)

Vehicle Registration Plates of Thailand – Update

September 9, 2009

I completed version 0.2 with many updates from my Flickr friend “channarong108”.

You can download it here: Vehicle Registration Plates of Thailand v0.2.

I have deleted the old version from the blog.

It is a 5.3MB Adobe PDF file so you need Adobe Reader to view it.

Get Adobe Reader

Get Adobe Reader

Comments and corrections are much appreciated.

Vehicle Registration Plates of Thailand

September 6, 2009

UPDATE: I replaced this with version 0.2 on 9th September 2009. See here.

Here is the first draft of a paper describing the current motor vehicle registration system for Thailand – complete with many illustrations.

Vehicle Registration Plates of Thailand

Vehicle Registration Plates of Thailand

I believe it is more complete that anything else that has been offered online, at least for free.

It is a 5MB Adobe PDF file so you need Adobe Reader to view it.

Get Adobe Reader

Get Adobe Reader

Comments and corrections are much appreciated.

Solved the Thai Code List – I Think

August 31, 2009

See https://bkkphotographer.wordpress.com/2009/08/13/province-number-on-thai-license-plates/ and the comments to this photo on Flickr.

A Flickr friend directed me to the web site of the Thai Department of Land Transportartion (DLT)  here. There you can download Excel spreadsheets with statistics of vehicle registrations in each province of Thailand. That’s interesting (to me) but the good news is that the spreadsheets are organized in order of the two digit code applied to license plates for buses and commercial trucks.

The spreadsheets don’t explicitly list the codes but when I combined the information I have from photographs (> 50%) with the columns in the spreadsheets I was able to fill in the blanks. I was very thin in the southern region, but I had 92 = Songkhla and that was enough to place the remainder.

The first digit of the code gives the region of Thailand as follows:

0 – Bangkok
1 – Central
2 – East
3 – Lower North East
4 – Upper North East
5 – Upper North
6 – Lower North
7- West
8 – Upper South
9 – Lower South

Within each sub-region the codes are allocated roughly north-south, west-east. There are exceptions with provinces created since the DLT created the system, for example Sa Kaeo in the East and Nong Bua Lamphu in the North East.

Code Name Thai Name
01 Bangkok กรุงเทพมหานคร
10 Chai Nat ชัยนาท
11 Sing Buri สิงห์บุรี
12 Lop Buri ลพบุรี
13 Ang Thong อ่างทอง
14 Saraburi สระบุรี
15 Ayutthaya พระนครศรีอยุธยา
16 Pathum Thani ปทุมธานี
17 Nonthaburi นนทบุรี
18 Samut Prakan สมุทรปราการ
20 Nakhon Nayok นครนายก
21 Prachin Buri ปราจีนบุรี
22 Chachoengsao ฉะเชิงเทรา
23 Chon Buri ชลบุรี
24 Rayong ระยอง
25 Chanthaburi จันทบุรี
26 Trat ตราด
27 Sa Kaeo สระแก้ว
30 Chaiyaphum ชัยภูมิ
31 Yasothon ยโสธร
32 Ubon Ratchathani อุบลราชธานี
33 Si Sa Ket ศรีสะเกษ
34 Buri Ram บุรีรัมย์
35 Nakhon Ratchasima นครราชสีมา
36 Surin สุรินทร์
37 Amnat Charoen อำนาจเจริญ
38 Nong Bua Lam Phu หนองบัวลำภู
40 Nong Khai หนองคาย
41 Loei เลย
42 Udon Thani อุดรธานี
43 Nakhon Phanom นครพนม
44 Sakon Nakhon สกลนคร
45 Khon Kaen ขอนแก่น
46 Kalasin กาฬสินธุ์
47 Maha Sarakham มหาสารคาม
48 Roi Et ร้อยเอ็ด
49 Mukdahan มุกดาหาร
50 Chiang Rai เชียงราย
51 Mae Hong Son แม่ฮ่องสอน
52 Chiang Mai เชียงใหม่
53 Phayao พะเยา
54 Nan น่าน
55 Lamphun ลำพูน
56 Lampang ลำปาง
57 Phrae แพร่
60 Uttaradit อุตรดิตถ์
61 Sukhothai สุโขทัย
62 Tak ตาก
63 Phitsanulok พิษณุโลก
64 Kamphaeng Phet กำแพงเพชร
65 Phichit พิจิตร
66 Phetchabun เพชรบูรณ์
67 Nakhon Sawan นครสวรรค์
68 Uthai Thani อุทัยธานี
70 Suphanburi สุพรรณบุรี
71 Kanchanaburi กาญจนบุรี
72 Nakhon Pathom นครปฐม
73 Ratchaburi ราชบุรี
74 Samut Sakhon สมุทรสาคร
75 Samut Songkhram สมุทรสงคราม
76 Phetchaburi เพชรบุรี
77 Prachuap Khiri Khan ประจวบคีรีขันธ์
80 Chumpon ชุมพร
81 Ranong ระนอง
82 Surat Thani สุราษฎร์ธานี
83 Phang Nga พังงา
84 Nakhon Si Thammarat นครศรีธรรมราช
85 Krabi กระบี่
86 Phuket ภูเก็ต
90 Phattalung พัทลุง
91 Trang ตรัง
92 Songkhla สงขลา
93 Satun สตูล
94 Pattani ปัตตานี
95 Yala ยะลา
96 Narathiwat นราธิวาส

I verified 44 = Sakon Nakhon and 50 = Chiang Rai today by observation.

A corollary is that the six-digit license plates are duplicated across the country. For example each province registers buses in a series starting 10-xxxx. So a unique registration has to have the two digit code pre-pended.

I want to be able to search by Lightroom catalog for such duplicates. i have the data in my add-in but it is hard to write a SQL query – not least because I still have not found a working ODBC driver for the Lightroom database.

Fifty Percent!

August 23, 2009

With help from a Thai Flickr friend I have worked out half the Thai Department of Land Transportation two-digit province codes for truck and bus license plates.

See here and the comments on this Flickr picture.

01 Bangkok กรุงเทพมหานคร
12 Lop Buri ลพบุรี
13 Ang Thong อ่างทอง
14 Saraburi สระบุรี
15 Ayutthaya พระนครศรีอยุธยา
16 Pathum Thani ปทุมธานี
17 Nonthaburi นนทบุรี
18 Samut Prakan สมุทรปราการ
21 Prachin Buri ปราจีนบุรี
22 Chachoengsao ฉะเชิงเทรา
23 Chon Buri ชลบุรี
24 Rayong ระยอง
25 Chanthaburi จันทบุรี
27 Sa Kaeo สระแก้ว
31 Yasothon ยโสธร
32 Ubon Ratchathani อุบลราชธานี
33 Si Sa Ket ศรีสะเกษ
34 Buri Ram บุรีรัมย์
35 Nakhon Ratchasima นครราชสีมา
36 Surin สุรินทร์
45 Khon Kaen ขอนแก่น
46 Kalasin กาฬสินธุ์
47 Maha Sarakham มหาสารคาม
60 Uttaradit อุตรดิตถ์
61 Sukhothai สุโขทัย
63 Phitsanulok พิษณุโลก
64 Kamphaeng Phet กำแพงเพชร
66 Phetchabun เพชรบูรณ์
68 Uthai Thani อุทัยธานี
70 Suphanburi สุพรรณบุรี
71 Kanchanaburi กาญจนบุรี
72 Nakhon Pathom นครปฐม
73 Ratchaburi ราชบุรี
74 Samut Sakhon สมุทรสาคร
75 Samut Songkhram สมุทรสงคราม
76 Phetchaburi เพชรบุรี
77 Prachuap Khiri Khan ประจวบคีรีขันธ์

Progress!

August 16, 2009

I have made good progress looking at the small two digit numbers on Thai truck and bus license plates and seeing how they correspond to the province. I introduced the problem here.

Thailand Truck License Plate

Thailand Truck License Plate

I have gone through several hundred pictures from my Lightroom database where the province code and the province name (in Thai characters) are visible. It does seem that the two digit code identifies the province (changwat), 01 = Bangkok for example. I have never seen more than one code for a province or a code used for more than one province. (It’s a 1-to-1 mapping in CS jargon.)

Here is that I have so far:

License Plate Name Thai Name
01 Bangkok กรุงเทพมหานคร
13 Ang Thong อ่างทอง
14 Saraburi สระบุรี
15 Ayutthaya พระนครศรีอยุธยา
16 Pathum Thani ปทุมธานี
17 Nonthaburi นนทบุรี
18 Samut Prakan สมุทรปราการ
21 Prachin Buri ปราจีนบุรี
22 Chachoengsao ฉะเชิงเทรา
23 Chon Buri ชลบุรี
24 Rayong ระยอง
25 Chanthaburi จันทบุรี
27 Sa Kaeo สระแก้ว
31 Yasothon ยโสธร
32 Ubon Ratchathani อุบลราชธานี
33 Si Sa Ket ศรีสะเกษ
34 Buri Ram บุรีรัมย์
35 Nakhon Ratchasima นครราชสีมา
36 Surin สุรินทร์
45 Khon Kaen ขอนแก่น
46 Kalasin กาฬสินธุ์
47 Maha Sarakham มหาสารคาม
60 Uttaradit อุตรดิตถ์
63 Phitsanulok พิษณุโลก
64 Kamphaeng Phet กำแพงเพชร
68 Uthai Thani อุทัยธานี
70 Suphanburi สุพรรณบุรี
72 Nakhon Pathom นครปฐม
73 Ratchaburi ราชบุรี
74 Samut Sakhon สมุทรสาคร
75 Samut Songkhram สมุทรสงคราม
License Plate Name Thai Name
1 Bangkok กรุงเทพมหานคร
13 Ang Thong อ่างทอง
14 Saraburi สระบุรี
15 Ayutthaya พระนครศรีอยุธยา
16 Pathum Thani ปทุมธานี
17 Nonthaburi นนทบุรี
18 Samut Prakan สมุทรปราการ
21 Prachin Buri ปราจีนบุรี
22 Chachoengsao ฉะเชิงเทรา
23 Chon Buri ชลบุรี
24 Rayong ระยอง
25 Chanthaburi จันทบุรี
27 Sa Kaeo สระแก้ว
31 Yasothon ยโสธร
32 Ubon Ratchathani อุบลราชธานี
33 Si Sa Ket ศรีสะเกษ
34 Buri Ram บุรีรัมย์
35 Nakhon Ratchasima นครราชสีมา
36 Surin สุรินทร์
45 Khon Kaen ขอนแก่น
46 Kalasin กาฬสินธุ์
47 Maha Sarakham มหาสารคาม
60 Uttaradit อุตรดิตถ์
63 Phitsanulok พิษณุโลก
64 Kamphaeng Phet กำแพงเพชร
68 Uthai Thani อุทัยธานี
70 Suphanburi สุพรรณบุรี
72 Nakhon Pathom นครปฐม
73 Ratchaburi ราชบุรี
74 Samut Sakhon สมุทรสาคร
75 Samut Songkhram สมุทรสงคราม

I have 32 out of 76 provinces – 42%. To find more sans travel I need to look at my older pictures in ThumbsPlus.

I added a Region field to my little Lightroom Vehicle Information Plugin so I can record the information in the database. I have done it in a general way so I can record the same data for license plates of other countries.

New Lightroom Region Code

New Lightroom Region Code

I want to learn how to “inject” these name-value pairs as typed Vehicle Tag keywords into pictures that I export as Jeff Friedl does for his Geocoding information:

veh:state=Thailand
veh:regnclass=Bus
veh:regn=10-7054
veh:fleettype=Transport Company
veh:fleetnumber=0579-0011
veh:region=35-Nakhon Ratchasima

Province Number (?) on Thai License Plates

August 13, 2009

Province Number (?) on Thai License Plates

Originally uploaded by Ian Fuller

To prove how impossibly nerdy I am, I’m trying to work out something about the Thai license plate system.

Most Thai Truck & Bus license registration plates have a 2-digit number on them, top or bottom right.

I think it corresponds to the province of registration. The province name is at the bottom of the plate in Thai letters. I do not read Thai but I have a list from Wikipedia : http://en.wikipedia.org/wiki/Provinces_of_thailand in Thai and English.

I hoped they were the two digit codes in ISO 3166-2:TH or maybe the first two digits of the postal code, but they are not.

Here is a table of the 76 provinces of Thailand with the codes I have worked out in the past two days. I have not gone through all my old pictures to extract the information from them.

License Plate Name Thai Name
1 Bangkok กรุงเทพมหานคร
32 Samut Prakan สมุทรปราการ
17 Nonthaburi นนทบุรี
16 Pathum Thani ปทุมธานี
Phra Nakhon Si Ayutthaya พระนครศรีอยุธยา
13 Ang Thong อ่างทอง
Lop Buri ลพบุรี
Sing Buri สิงห์บุรี
Chai Nat ชัยนาท
Saraburi สระบุรี
Chon Buri ชลบุรี
Rayong ระยอง
Chanthaburi จันทบุรี
Trat ตราด
22 Chachoengsao ฉะเชิงเทรา
Prachin Buri ปราจีนบุรี
Nakhon Nayok นครนายก
Sa Kaeo สระแก้ว
35 Nakhon Ratchasima นครราชสีมา
Buri Ram บุรีรัมย์
36 Surin สุรินทร์
33 Si Sa Ket ศรีสะเกษ
Ubon Ratchathani อุบลราชธานี
31 Yasothon ยโสธร
Chaiyaphum ชัยภูมิ
Amnat Charoen อำนาจเจริญ
Nong Bua Lam Phu หนองบัวลำภู
Khon Kaen ขอนแก่น
Udon Thani อุดรธานี
Loei เลย
Nong Khai หนองคาย
Maha Sarakham มหาสารคาม
Roi Et ร้อยเอ็ด
Kalasin ร้อยเอ็ด
Sakon Nakhon สกลนคร
Nakhon Phanom นครพนม
Mukdahan มุกดาหาร
Chiang Mai เชียงใหม่
Lamphun ลำพูน
Lampang ลำปาง
Uttaradit อุตรดิตถ์
Phrae แพร่
Nan น่าน
Phayao พะเยา
Chiang Rai เชียงราย
Mae Hong Son แม่ฮ่องสอน
Nakhon Sawan นครสวรรค์
68 Uthai Thani อุทัยธานี
Kamphaeng Phet กำแพงเพชร
Tak ตาก
Sukhothai สุโขทัย
Phitsanulok พิษณุโลก
Phichit พิจิตร
Phetchabun เพชรบูรณ์
Ratchaburi ราชบุรี
Kanchanaburi กาญจนบุรี
Suphanburi สุพรรณบุรี
Nakhon Pathom นครปฐม
Samut Sakhon สมุทรสาคร
Samut Songkhram สมุทรสงคราม
Phetchaburi เพชรบุรี
Prachuap Khiri Khan ประจวบคีรีขันธ์
Nakhon Si Thammarat นครศรีธรรมราช
Krabi กระบี่
Phang Nga พังงา
Phuket ภูเก็ต
Surat Thani สุราษฎร์ธานี
Ranong ระนอง
Chumpon ชุมพร
Songkhla สงขลา
Satun สตูล
Trang ตรัง
Phattalung พัทลุง
Pattani ปัตตานี
Yala ยะลา
Narathiwat นราธิวาส
License Plate Name Thai Name
1 Bangkok กรุงเทพมหานคร
32 Samut Prakan สมุทรปราการ
17 Nonthaburi นนทบุรี
16 Pathum Thani ปทุมธานี
Phra Nakhon Si Ayutthaya พระนครศรีอยุธยา
13 Ang Thong อ่างทอง
Lop Buri ลพบุรี
Sing Buri สิงห์บุรี
Chai Nat ชัยนาท
Saraburi สระบุรี
Chon Buri ชลบุรี
Rayong ระยอง
Chanthaburi จันทบุรี
Trat ตราด
22 Chachoengsao ฉะเชิงเทรา
Prachin Buri ปราจีนบุรี
Nakhon Nayok นครนายก
Sa Kaeo สระแก้ว
35 Nakhon Ratchasima นครราชสีมา
Buri Ram บุรีรัมย์
36 Surin สุรินทร์
33 Si Sa Ket ศรีสะเกษ
Ubon Ratchathani อุบลราชธานี
31 Yasothon ยโสธร
Chaiyaphum ชัยภูมิ
Amnat Charoen อำนาจเจริญ
Nong Bua Lam Phu หนองบัวลำภู
Khon Kaen ขอนแก่น
Udon Thani อุดรธานี
Loei เลย
Nong Khai หนองคาย
Maha Sarakham มหาสารคาม
Roi Et ร้อยเอ็ด
Kalasin ร้อยเอ็ด
Sakon Nakhon สกลนคร
Nakhon Phanom นครพนม
Mukdahan มุกดาหาร
Chiang Mai เชียงใหม่
Lamphun ลำพูน
Lampang ลำปาง
Uttaradit อุตรดิตถ์
Phrae แพร่
Nan น่าน
Phayao พะเยา
Chiang Rai เชียงราย
Mae Hong Son แม่ฮ่องสอน
Nakhon Sawan นครสวรรค์
68 Uthai Thani อุทัยธานี
Kamphaeng Phet กำแพงเพชร
Tak ตาก
Sukhothai สุโขทัย
Phitsanulok พิษณุโลก
Phichit พิจิตร
Phetchabun เพชรบูรณ์
Ratchaburi ราชบุรี
Kanchanaburi กาญจนบุรี
Suphanburi สุพรรณบุรี
Nakhon Pathom นครปฐม
Samut Sakhon สมุทรสาคร
Samut Songkhram สมุทรสงคราม
Phetchaburi เพชรบุรี
Prachuap Khiri Khan ประจวบคีรีขันธ์
Nakhon Si Thammarat นครศรีธรรมราช
Krabi กระบี่
Phang Nga พังงา
Phuket ภูเก็ต
Surat Thani สุราษฎร์ธานี
Ranong ระนอง
Chumpon ชุมพร
Songkhla สงขลา
Satun สตูล
Trang ตรัง
Phattalung พัทลุง
Pattani ปัตตานี
Yala ยะลา
Narathiwat นราธิวาส
Pattaya พัทยา
Thanks to Microsoft Excel 2007 for its DWIM with HTML tables – even into Firefox. I remember a time when such antics worked with IE but not with other browsers.

Is a registration number such as 10-7054 above unique across all of Thailand, or does each province issue its own registrations? If that is the case the unique registration is really 35-10-7054.

Clearly Thailand reissues plates. I was seeing 10- prefix Bangkok buses in the 1980s. Slowly the numbers are increasing. I expect I’ll observe a 15-nnnn license plate soon.

(I was going to type 4 x’s instead of 4 n’s above. Then I remembered a problem I had with email when I did that. My receiver’s spam / smut filter dumped any message with three or more x’s as suspected obscenity. I hope safety software has got more sophisticated since 2004 but I would not bet on it.)