Archive for March 22nd, 2007

Thai ID Format Validation การตรวจสอบ หมายเลขประจำตัวประชาชน แบบเบื้องต้น

Thursday, March 22nd, 2007

หลายครั้งที่ 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 แล้วจึงเอาเศษที่ได้ไปเป็นเลขตัวสุดท้ายครับ :D

เข้าบล็อกตัวเองไม่ได้

Thursday, March 22nd, 2007

หายไปหนึ่งอาทิตย์เต็มๆ เพราะบริการอินเตอร์เน็ตที่ใช้อยู่มีปัญหาหรือยังไงไม่ทราบ (ที่บ้านกับที่ทำงานใช้เจ้าเดียวกันเลย) ทำให้เข้า Wordpress ไม่ได้ซะงั้น
โชคดีที่วันนี้ถือโอกาสที่ออกมาหาลูกค้า แวะมาเล่น Wi-Fi ที่ร้านกาแฟ เลยเข้าได้ตามปกติครับ