วันอังคารที่ 31 พฤษภาคม พ.ศ. 2554

บทความเล็กกับการ โกงบัตรประชาชนใช้ในการสมัคร User ของเว็ปต่างๆ

บทความเล็กกับการ โกงบัตรประชาชนใช้ในการสมัคร User ของเว็ปต่างๆ

บทความเล็กกับการ โกงบัตรประชาชนใช้ในการสมัคร User ของเว็ปต่างๆ

หลัก การโกงง่ายมาก

สังเกตุมั้ยครับว่าทำไมระบบถึงรู้ว่าคุณใส่เลขบัตร ประชาชนมั่ว

แต่ในบางครั้งการมั่วของคุณกับใช้ได้

วิธีคิด ง่ายๆ

ยกตัวอย่างนะคับ

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

Xคือ เลขที่คุณต้องกรอกให้ถูกครับ
มันเป็นเลขในการ check digit

วิธี การให้ได้มาซึ่งหลักที่ 13 คือ

นำเลขแต่ละตัว มาคุณตามหลักของมันคับ เช่น
ขั้นตอนที่ 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

function checkID(id) {
if(id.length != 13) return false;
for(i=0, sum=0; i

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



เวอร์ชัน php


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





เวอร์ชั่น ASP 3


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


"" Then
If checkID(Request("txtID")) Then
Response.Write "รหัสถูกต้องครับ"
Else
Response.Write "รหัสที่คุณกรอกไม่ถูกต้องครับ"
End If
End If
%>

จริงๆ แล้วถ้าเพื่อนๆ จะเอาไปใช้จริง ก็ Copy ไปเฉพาะฟังก์ชัน CheckID ก็ได้ครับ โดยพารามิเตอร์ตัวแรกของ CheckID ทั้ง 3 ภาษานี้คือ ข้อความที่เก็บรหัสประจำตัวประชาชนไว้ครับ ฟังก์ชันนี้จะคืนค่าเป็น True ถ้ารหัสถูกต้อง และคืนค่าเป็น False ถ้ารหัสผิดครับ

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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น