มาดูวิธีเช็ค ว่า "เขามั่วรหัสประชาชนรึเปล่า ?"
ขอเริ่มบทความแบบพิสดาร บ้างได้ไหมครับ ก่อนอ่านบทความต่อไป ผมขอนำเสนอ หมอดูที่ชื่อว่า "แม่นมั่กๆ "
รหัสประจำตัวประชาชน (ขอเรียกสั้นๆว่า รหัสประชาชน ) ที่ เราจะมาตรวจกันวันนี้เป็นรหัสประชาชน ของคนไทยนะครับ
ก่อนอื่น ให้เพื่อนๆ หยิบบัตรประชาชนของเพื่อนๆ ขึ้นมาดูกันเลยครับ
รหัสประจำตัวของเราจะ อยู่ในรูป 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
function checkID(id) {
if(id.length != 13) return false;
for(i=0, sum=0; i <>
sum += parseFloat(id.charAt(i))*(13-i);
if((11-sum%11)%10!=parseFloat(id.charAt(12))) return false;
return true;
}
function checkForm() {
if(!checkID(document.form1.txtID.value))
alert('รหัส ประชาชนไม่ถูกต้อง ');
else
alert('รหัส ประชาชนถูกต้อง เชิญผ่านได้ ');
}
รหัสประจำตัวประชาชน :
ตรวจสอบ " />
เวอร์ชั่น 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