ยินดีต้อนรับ กรุณา สมัครสมาชิก หรือเข้าสู่ระบบ

Home » webboard » PHP
เข้าชม : 1461

การตรวจสอบเลขที่บัตรประชาชน

โพสต์เมื่อ: วันจันทร์ 4 เมษายน 2554  21:01 น.

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

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

ในบทความนี้จำเป็นต้องมีการแยกตัวเลขออกมาเป็นเลขแต่ละหลัก เราอาจจะมองเลขทั้งหมดเป็น array ของ character ก็ได้ แต่ในที่นี้เราจะใช้ preg_match เพื่อการแยกหลักของตัวเลขแต่ละตัว และ preg_match ยังช่วยเราในการตรวจสอบ (Validation) ข้อมูลที่เข้ามาว่าเป็นเลขจำนวน 13 หลักหรือไม่


PHP
<?
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

PHP
$par = 11-($val%11); //เอาค่าไปลบออกจาก 11 และเอาผลลัพธ์ไปลบออกจาก 11
ที่นี้ก็เอาไปเทียบว่าตรงกับหลักสุดท้ายหรือไม่

PHP
return $par==$matches[13];
แต่จะมีปัญหาในกรณีที่ $par ที่ได้มีค่ามากกว่า 9 หรือเป็นเลข 2 หลักให้เอาเฉพาะหลักสุดท้าย เราสามารถหาได้ด้วย

PHP
while($par>9){ $par %= 10; }

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

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

ที่มา :http://articles.modoeye.com/Design_and_Development/PHP/การตรวจสอบเลขที่บัตรประชาชน.html
ตรวจสอบเลขบัตรประชาชน


คุณต้องสมัครสมาชิก ถึงจะโพสกระทู้ได้

ปิดรับสมัครสมาชิกแล้ว


คำยอดฮิต :- 0