ความหมายแต่ละหลักของเลขหมายบัตรประชาชน
หลักที่ 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 หลักแรก
หลักแนวคิดในการเขียนโปรแกรม
สมมุติเลขที่บัตร
345020041569-8
เลข 8 คือ bit check ครับ
การคำนวนก็
3*13+4*12+5*11+0*10+2*9+0*8+0*7+4*6+1*5+5*4+6*3+ 9*2
นำผลลัพธ์มารวมกัน ครับ ในที่นี้จะได้ 245
นำ 245 มา MOD ด้วย 11 จะได้ 3
หลังจาก Mod ด้วย 11 แล้ว ให้ตรวจสอบผลลัพธ์ก่อนครับ
ถ้าได้ 1 ให้เปลี่ยนเป็น 0
ถ้าได้ 0 ให้เปลี่ยนเป็น 1
สามารถใช้ mod 10 แทนก็ได้
ถ้าเป็นเลขอื่นๆ ให้เอา 11 ตั้งแล้วนำค่าไป ลบ
นำ 11 ลบด้วย 3 จะได้ 8 พอดีครับ
ถ้าที่ได้ตรงกับ bit check ก็แสดงความหมายเลขบัตรนี้ถูกต้องครับ
อัลกรอริทึม
หลัก 13=(11-(ผลรวม(หลัก1*13,หลัก2*12,…,หลัก12*2) mod 11)) mod 10
หลัก 13=(11-(ผลรวม(3*13+4*12+…9*2) mod 11)) mod 10
หลัก 13=(11-(245 mod 11)) mod 10
หลัก 13=(11-(3)) mod 10
หลัก 13=8 mod 10
หลัก 13=8
มาดูโปรแกรมมิ่งที่เขียนตามอัลกรอรึทึมกันบ้าง
function checkSSN($ssn) {
$ssn = trim($ssn);
$ssn = str_replace(”-”, “”, $ssn);
$len = strlen($ssn);
if ($len != 13) {
echo “Error Social Security Number”;
exit();
}
$sum=0;
$c = 0;
for($i = $len; $i > 1; $i–) {
$sum += (int)(substr($ssn, $c, 1)) * $i;
$c++;
}
$mod = (int)($sum % 11);
$result = (11 - $mod) % 10;
$checkbit = substr($ssn, -1, 1);
if ($result == $checkbit) {
echo “Social security number : $ssn”;
echo “Result : True”;
return true;
} else {
echo “Social security number : $ssn”;
echo “Result : False”;
return false;
}
}