Code ตรวจสอบเลขบัตรประชาชน

Code ตรวจสอบเลขบัตรประชาชน


มาดูวิธีเช็ค ว่า "เขามั่วรหัสประชาชนรึเปล่า?"

ขอเริ่มบทความแบบพิสดาร บ้างได้ไหมครับ ก่อนอ่านบทความต่อไป ผมขอนำเสนอ หมอดูที่ชื่อว่า "แม่นมั่กๆ"

รหัสประจำตัวประชาชน (ขอเรียกสั้นๆว่า รหัสประชาชน) ที่ เราจะมาตรวจกันวันนี้เป็นรหัสประชาชน ของคนไทยนะครับ

ก่อนอื่น ให้เพื่อนๆ หยิบบัตรประชาชนของเพื่อนๆ ขึ้นมาดูกันเลยครับ

รหัสประจำตัวของเราจะ อยู่ในรูป x-xxxx-xxxxx-xx-x (เลข 13 หลัก) ใช่มั้ยครับ แต่เพื่อนๆ รู้ป่ะว่า จริงๆแล้ว รหัส

ประจำตัวของเราเนี่ย จริงๆ แล้วมีแค่ 12 หลักเท่านั้น (12 หลักแรก) แต่เลขตัวสุดท้ายเนี่ย เป็น Check Digit ครับ

Check Digit คือ อะไรหนอ?

Check Digit เป็น ตัวเลข 1 หลัก ที่เกิดจากการนำเลขหลักอื่นๆ มา บวก ลบ คูณ หาร กัน และ Check Digit นี่หละ

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

เวลาเราจะตรวจสอบว่า ข้อมูลที่กรอกมาถูกต้องรึเปล่า เราจะคำนวณ Check Digit จากเลขหลักอื่นๆ เพื่อเปรียบเทียบ

กับ Check Digit ที่เขากรอกมาว่าตรงกันมั้ย ถ้าตรงกันก็แสดงว่าข้อมูลถูกต้องไม่ผิด ไม่มั่ว แต่ถ้าไม่ตรงกัน ก็แปลว่า

ข้อมูลที่กรอกมามี ข้อมูลซักหลัก หรือ สองหลักที่ผิด เราก็สามารถเตือนให้ผู้ใช้ทราบและกรอกใหม่ อีกครั้งได้

เอ้า มาลองคำนวณ Check Digit ของรหัสประชาชนเรากันดีกว่า

ขอยกตัวอย่างรหัส ประชาชนนี้ละกันครับ

1-2015-41462-23-4

ไหน ตอบหน่อยซิ ว่า Check Digit ของรหัสประชาชนนี้คือเลขอะไรคร้าบ.......

เอ้า ถามเองตอบเองก็ได้ Check Digit ของรหัสประชาชนนี้ คือเลข 4 (เลขตัวสุดท้ายนั่นเอง)

เรามาดูกันว่า เลข 4 เกิดจากอะไรหว่า? คำนวณมาได้ไง? มั่วอ๊ะเปล่า?

ขั้นตอนที่ 1 - เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน (หลักที่ 13 ไม่ต้องเอามานะ คร้าบ)

ขั้นตอนที่ 2 - เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน

ขั้นตอนที่ 3 - เอาผลคูณทั้ง 12 ตัวมา บวกกันทั้งหมด จะได้

13+24+0+10+45+32+7+24+30+8+6+6=205

ขั้นตอนที่ 4 - เอาเลขที่ได้จากขั้นตอนที่ 3 มา mod 11 (หารเอาเศษ) จะได้ 205 mod 11 = 7

ขั้นตอนที่ 5 - เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 4 จะได้ 11-7 = 4 (เราจะ ได้ 4 เป็นเลขในหลัก

Check Digit)

ถ้าเกิด ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit (เช่น 11 ให้ เอา 1 มา,

10 ให้เอา 0 มา เป็นต้น)

โอ้โห....มหัศจรรย์มาก ยอดเยี่ยมกระเทียมดอง เลขที่ได้ตรงกับเลขหลักที่ 13 ด้วยแหละ...ถ้าไม่ เชื่อก็เอาเลขบัตร

ประชาชนตัวเองมาคำนวณดู สิครับ

1 2 0 1 5 4 1 4 6 2 2 3

รหัสบัตร 1 2 0 1 5 4 1 4 6 2 2 3

ตัวคูณ 13 12 11 10 9 8 7 6 5 4 3 2

ผลคูณ 13 24 0 10 45 32 7 24 30 8 6 6

ผมคิดว่าหลายๆ คนคงมีคำถามในใจแล้วหละว่า ทำไมต้องเอามาคูณ 13 ทำไมต้องเอามา บวกกัน ทำไมต้องเอามา

mod 11 คำตอบที่ ผมให้ได้ก็คือ มันคือวิธีที่ถูกเลือกใช้ในการคำนวณ Check Digit ให้ กับรหัสประชาชนครับ แต่ถ้าเรา

จะคำนวณ Check Digit ให้กับรหัสสินค้า หรือ ISBN ของ หนังสือ เราก็ต้องใช้วิธีการคำนวณ ที่แตกต่างกันออกไป

ครับ

ในเมื่อรู้วิธีแล้ว เรามาเขียนโปรแกรมตรวจสอบกันดีกว่า

ผมเขียนไว้ให้หลายภาษา เหมือนกัน ให้เพื่อนๆ เลือกใช้ได้ตามสะดวกนะครับ

เวอร์ชัน php

function checkID($id) {

if(strlen($id) != 13) return false;

for($i=0, $sum=0; $i<12;$i++)

$sum += (int)($id{$i})*(13-$i);

if((11-($sum%11))%10 == (int)($id{12}))

return true;

return false;

}

?>

รหัสประจำตัวประชาชน :

ตรวจสอบ" />

if(isset($_GET['txtID'])) {

if(checkID($_GET['txtID']))

echo "รหัสถูก ต้องครับ";

else

echo "รหัสที่คุณ กรอกไม่ถูกต้องค"; รับ

}

?>

เวอร์ชัน JavaScript

รหัสประจำตัวประชาชน :

ตรวจสอบ" />

เวอร์ชั่น ASP 3

<%

Function checkID(id)

checkID = False

If Len(id) = 13 Then

Dim i, sum

For i = 1 To 12

sum = sum + CInt(Mid(id, i, 1))*(14-i)

Next

If (11-(sum Mod 11)) Mod 10 = CInt(Mid(id, i, 13)) Then

checkID = True

End If

End If

End Function

%>

รหัสประจำตัวประชาชน :

ตรวจสอบ" />

<%

If Request("txtID") <> "" Then

If checkID(Request("txtID")) Then

Response.Write "รหัส ถูกต้องครับ"

Else

Response.Write "รหัส ที่คุณกรอกไม่ถูกต้องครับ"

End If

End If

%>

จริงๆ แล้วถ้าเพื่อนๆ จะเอาไปใช้จริง ก็ Copy ไปเฉพาะ ฟังก์ชัน CheckID ก็ได้ครับ โดยพารามิเตอร์ตัวแรกของ

CheckID ทั้ง 3 ภาษานี้คือ ข้อความที่เก็บรหัสประจำตัวประชาชนไว้ครับ ฟังก์ชันนี้จะคืนค่าเป็น True ถ้ารหัสถูกต้อง

และคืนค่าเป็น False ถ้ารหัสผิดครับ

สรุป

เราได้เรียนรู้วิธีการ ตรวจสอบเบื้องต้น (ข้อย้ำว่าเบื้อง ต้น) เพราะรหัสประชาชนที่ผู้ใช้กรอก อาจมี Check Digit ที่ถูก

ต้อง แต่อาจเป็นรหัสประชาชนที่ไม่มีอยู่จริงก็ได้นะครับ

ศึกษาเพิ่มเติมได้ที่ : http://www.don99.com

2 ความคิดเห็น: