การตรวจสอบเลขที่บัตรประชาชน เขียนเมื่อ 2009.06.30 โดย

เลขที่บัตรประชาชนนั้นเป็นเลขประจำตัวบุคคลซึ่งบ่งบอกจังหวัดและอำเภอที่กำเนิด, เลขที่ประจำตัวบุคคลภายในจังหวัด และเลขตรวจสอบความถูกต้อง เนื่องจากเลขที่ประจำตัวประชาชนไม่ใช่เลข running number ทั่วไปเพื่อความถูกต้องเราสามารถตรวจสอบได้โดยการเขียนฟังก์ชั่นตรวจสอบ

ทฤษฎีการออกแบบ ตามการออกแบบเลขที่บัตรประชาชนนั้น จะมีเลขหลักสุดท้ายเป็นตัวเช็คความถูกต้อง (Parition digit) โดยการคำนวณก็เพียงเอาเลขทั้ง 12 หลัก (2-13) คูณด้วยเลขประจำหลัก แล้วหารเอาเศษด้วย 11 เอาผลที่ได้ไปลบออกจาก 11 เลขหลักหน่วยที่ได้จะเป็นเลข Parition digit หรือเลขหลักสุดท้ายนั่นเอง

ในบทความนี้จำเป็นต้องมีการแยกตัวเลขออกมาเป็นเลขแต่ละหลัก เราอาจจะมองเลขทั้งหมดเป็น array ของ character ก็ได้ แต่ในที่นี้เราจะใช้ preg_match เพื่อการแยกหลักของตัวเลขแต่ละตัว และ preg_match ยังช่วยเราในการตรวจสอบ (Validation) ข้อมูลที่เข้ามาว่าเป็นเลขจำนวน 13 หลักหรือไม่
<?
function checkid($id){
if(@preg_match("/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/", $id, $matches)){ //ใช้ preg_match เพื่อตรวจสอบและแยกเลขออกเป็น 13 หลัก
$val = 0;
for($i = 13; $i > 1; $i--){ //ทำการวน loop เพื่อทำการคำนวน
echo $matches[14-$i]."*".$i."=".$i*$matches[14-$i]."\n";
$val += $i*$matches[14-$i];
}
}else{
return false;
}
?>
จากโค๊ดนี้เราจะได้เลขทั้ง 12 หลักคูณกับเลขประจำหลัก ต่อไปคือการเอาค่าที่ได้ไปหารด้วย 11 และเอาผลลัพธ์ไปลบออกจาก 11
$par = 11-($val%11); //เอาค่าไปลบออกจาก 11 และเอาผลลัพธ์ไปลบออกจาก 11

ที่นี้ก็เอาไปเทียบว่าตรงกับหลักสุดท้ายหรือไม่
return $par==$matches[13];

แต่จะมีปัญหาในกรณีที่ $par ที่ได้มีค่ามากกว่า 9 หรือเป็นเลข 2 หลักให้เอาเฉพาะหลักสุดท้าย เราสามารถหาได้ด้วย
while($par>9){ $par %= 10; }

เป็น trick ในการหาเพียงเลขหลัดสุดท้ายครับ เท่านี้เราก็สามารถตรวจสอบว่าเลขบัตรประชาชนนนั้นถูกต้องตามรูปแบบหรือไม่ครับ

หรือสามารถใช้บริการตรวจสอบได้ที่ ตรวจสอบเลขที่บัตรประชาชน



คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย