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

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

รหัสประจำตัวของเราจะอยู่ในรูป 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 ไม่ต้องเอามานะคร้าบ)
    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 มา เป็นต้น)

โอ้โห….มหัศจรรย์มาก ยอดเยี่ยมกระเทียมดอง เลขที่ได้ตรงกับเลขหลักที่ 13 ด้วยแหละ…ถ้าไม่เชื่อก็เอาเลขบัตรประชาชนตัวเองมาคำนวณดูสิครับ

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

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

………………………………………………………………………………
เวอร์ชัน JavaScript
<script language="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 name="form1" onsubmit="checkForm(); return false;"> รหัสประจำตัวประชาชน :
<input type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>
………………………………………………………………………………
เวอร์ชัน 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 type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>

<?
if(isset($_GET[‘txtID’])) { 
    if(checkID($_GET[‘txtID’])) 
    echo "รหัสถูกต้องครับ"; 
    else 
        echo "รหัสที่คุณกรอกไม่ถูกต้องครับ";
}
?>
…………………………………………………………………………
เวอร์ชั่น 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 type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>

<%
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 ที่ถูกต้อง แต่อาจเป็นรหัสประชาชนที่ไม่มีอยู่จริงก็ได้นะครับ

 Copyright © 2004-2005 Siamdev.Net Developers Team

About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s