มาดูวิธีเช็ค ว่า “เขามั่วรหัสประชาชนรึเปล่า?”
200910 Jun
มาดูวิธีเช็ค ว่า “เขามั่วรหัสประชาชนรึเปล่า?”
โอ๊ะ ทำได้ไงเนี่ย อยากรู้หละสิ ถ้าอยากรู้มาลองอ่านบทความต่อสิครับ ^_^ รหัสประจำตัวประชาชน (ขอเรียกสั้นๆว่า รหัสประชาชน) ที่เราจะมาตรวจกันวันนี้เป็นรหัสประชาชน ของคนไทยนะครับ ก่อนอื่น ให้เพื่อนๆ หยิบบัตรประชาชนของเพื่อนๆ ขึ้นมาดูกันเลยครับ รหัสประจำตัวของเราจะอยู่ในรูป x-xxxx-xxxxx-xx-x (เลข 13 หลัก) ใช่มั้ยครับ แต่เพื่อนๆ รู้ป่ะว่า จริงๆแล้ว รหัสประจำตัวของเราเนี่ย จริงๆ แล้วมีแค่ 12 หลักเท่านั้น (12 หลักแรก) แต่เลขตัวสุดท้ายเนี่ย เป็น Check Digit ครับ
Check Digit คืออะไรหนอ?
Check Digit เป็นตัวเลข 1 หลัก ที่เกิดจากการนำเลขหลักอื่นๆ มา บวก ลบ คูณ หาร กัน และ Check Digit นี่หละครับ จะช่วยให้เราตรวจสอบในเบื้องต้นได้ว่า ข้อมูลที่กรอกมาถูกต้องรึเปล่า เวลาเราจะตรวจสอบว่าข้อมูลที่กรอกมาถูกต้องรึเปล่า เราจะคำนวณ Check Digit จากเลขหลักอื่นๆ เพื่อเปรียบเทียบกับ Check Digit ที่เขากรอกมาว่าตรงกันมั้ย ถ้าตรงกันก็แสดงว่าข้อมูลถูกต้องไม่ผิด ไม่มั่ว แต่ถ้าไม่ตรงกัน ก็แปลว่า ข้อมูลที่กรอกมามีข้อมูลซักหลัก หรือ สองหลักที่ผิด เราก็สามารถเตือนให้ผู้ใช้ทราบและกรอกใหม่ อีกครั้งได้
- ขั้นตอนที่ 1 - เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน (หลักที่ 13 ไม่ต้องเอามานะคร้าบ)
1 2 0 1 5 4 1 4 6 2 2 3 - ขั้นตอนที่ 2 - เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน
รหัสบัตร 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 - ขั้นตอนที่ 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 มา เป็นต้น)
ในเมื่อรู้วิธีแล้ว เรามาเขียนโปรแกรมตรวจสอบกันดีกว่า
ผมเขียนไว้ให้หลายภาษาเหมือนกัน ให้เพื่อนๆ เลือกใช้ได้ตามสะดวกนะครับ
Version Javascript
function checkID(id) {
if(id.length != 13) return false;
for(i=0, sum=0; i < 12; 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('รหัสประชาชนถูกต้อง เชิญผ่านได้');
}
</script>
<form>
รหัสประจำตัวประชาชน :
<input name="txtID" type="text" />
<input type="submit" value="ตรวจสอบ" />
</form>
Version 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;
}
?>
<form action="?" method="get">
รหัสประจำตัวประชาชน :
<input name="txtID" type="text" />
<input type="submit" value="ตรวจสอบ" />
</form>
<?
if(isset($_GET['txtID'])) {
if(checkID($_GET['txtID']))
echo "รหัสถูกต้องครับ";
else
echo "รหัสที่คุณกรอกไม่ถูกต้องค"; รับ
}
?>
Version 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
%>
<form action="?" method="get">
รหัสประจำตัวประชาชน :
<input name="txtID" type="text" />
<input type="submit" value="ตรวจสอบ" />
</form>
<%
If Request("txtID") <> "" Then
If checkID(Request("txtID")) Then
Response.Write "รหัสถูกต้องครับ"
Else
Response.Write "รหัสที่คุณกรอกไม่ถูกต้องครับ"
End If
End If
%>
แหล่งที่มีหลายแหล่งมากแต่ได้นำเนื้อหามาจาก Link ด้านล่างนี้ คนที่เป็น Original จริง ๆ ไม่ทราบว่าใครเป็นคนเขียนคนแรก แต่อย่างไรก้อทำให้เกิดประโยชน์ ขอบคุณแหล่งที่มาของบทความนี้ :http://nattster.siamdev.net/2006/09/id-verification/




