หลายครั้งที่ Registration form ต้องมีการรับหมายเลขประจำตัวประชาชนของผู้ใช้ โดยเลข 13 หลักเนี่ย หลักสุดทายจะเป็น check bit ครับ ทำให้เราพอจะเขียนโปรแกรมกรอง id ที่มั่วๆออกไปได้พอสมควร
สำหรับที่มานั้น ผมหาไม่เจอจริงๆครับ เพราะมีคนส่งให้อีกที แต่เคยผ่านตาตามเวปหน่วยงานของรัฐนี่ล่ะครับ
หลักที่ 1 หมายถึงประเภทบุคคลซึ่งมี 8 ประเภท คือ
ประเภทที่ 1 ได้แก่ คนที่เกิดและมีสัญชาติไทย ได้แจ้งเกิดภายในกำหนดเวลา (ตั้งแต่ 1 มกราคม 2527)
ประเภทที่ 2 ได้แก่ คนที่เกิดและมีสัญชาติไทย ได้แจ้งเกิดเกินกำหนดเวลา (ตั้งแต่ 1 มกราคม 2527)
ประเภทที่ 3 ได้แก่ คนไทยและคนต่างด้าวที่มีใบสำคัญประจำตัวคนต่างด้าว และมีที่อยู่ในทะเบียนบ้าน ในสมัยเริ่มแรก (1 มกราคม – 31 พฤษภาคม 2527)
ประเภทที่ 4 ได้แก่ คนไทยและคนต่างด้าวที่มีใบสำคัญคนต่างด้าวแต่แจ้งย้ายเข้า โดยยังไม่มีเลขประจำตัวประชาชนในสมัยเริ่มแรก (1 มกราคม – 31 พฤษภาคม 2527)
ประเภทที่ 5 ได้แก่ คนไทยที่ได้รับอนุมัติให้เพิ่มชื่อเข้าในทะเบียนบ้านในกรณีตกสำรวจหรือกรณีอื่น ๆ
ประเภทที่ 6 ได้แก่ ผู้ที่เข้าเมืองโดยไม่ชอบด้วยกฏหมาย และผู้ที่เข้าเมืองโดยชอบด้วยกฏหมาย แต่จะอยู่ในลักษณะชั่วคราว
ประเภทที่ 7 ได้แก่ บุตรของบุคคลประเภทที่ 6 ซึ่งเกิดในประเทศไทย
ประเภทที่ 8 ได้แก่ คนต่างด้าวที่เข้าเมืองโดยถูกต้องตามกฏหมาย คือ ได้รับใบสำคัญประจำตัวคนต่างด้าว คนที่ได้รับการแปลงสัญชาติเป็นสัญชาติไทย และคนที่ได้รับการให้สัญชาติไทยหลักที่ 2 ถึงหลักที่ 5 หมายถึงรหัสของสำนักทะเบียนที่ท่านมีชื่อในทะเบียนบ้านในขณะให้เลข สำหรับเด็กเกิดใหม่จะหมายถึงถิ่นที่เกิดเลยทีเดียว โดยหลักที่ 2 และ 3 หมายถึงจังหวัด หลักที่ 4 และ 5 หมายถึงอำเภอ หรือเทศบาล
หลักที่ 6 ถึงหลักที่ 10 หมายถึงกลุ่มที่ของบุคคลแต่ละประเภทตามหลักแรก หรือหมายถึงเล่มที่ ของสูติบัตร แล้วแต่กรณี
หลักที่ 11 และ 12 หมายถึงลำดับที่ของบุคคลในแต่ละกลุ่มประเภท หรือหมายถึงใบที่ของสูติบัตรแต่ละเล่ม แล้วแต่กรณี
หลักที่ 13 คือ ตัวเลขตรวจสอบความถูกต้องของเลข 12 หลักแรก
สูตรการ Gen เลขบัตรประชาชน
1. คูณตัวเลขในแต่ละหลัก
byte1 * 13
byte2 * 12
byte3 * 11
byte4 * 10
byte5 * 9
byte6 * 8
byte7 * 7
byte8 * 6
byte9 * 5
byte10 * 4
byte11 * 3
byte12 * 2
2. รวมยอดทั้งหมดที่คูณกันในแต่ละหลัก
3. หารด้วย 11
4. เหลือเศษเท่าไหร่เอาไปลบออกจาก 11ตัวอย่าง 310210161558X
(3*13)+(1*12)+(0*11)+(2*10)+(1*9)+(0*+(1*7)+(6*6)+(1*5)+(5*4)+(5*3)+(8*2) = 179
179 หาร 11 เหลือเศษ 3
เอาเศษ 3 ไปลบ 11 จะได้เลขตัวสุดท้ายคือ 8 ครับ
October 10th, 2007
ขอแก้ไขเพิ่มเติมครับ เอาเศษ 3 ไปลบ 11 จะได้เลขตัวสุดท้ายคือ 8 อันนี้ไม่ถูกเสียทีเดียว ต้องนำเลขที่ได้ไปหาร 10 แล้วจึงเอาเศษที่ได้ไปเป็นเลขตัวสุดท้ายครับ
2 Comments

ดีเพราะเวลาจำหมายเลขบัตรประจำตัวประชาชนไม่ได้ก็ทำให้หาเจอได้ง่าย
ดีเพราะเวลาจำหมายเลขบัตรประจำตัวประชาชนไม่ได้ก็ทำให้กลับมาจำได้