หลายคนอาจเคยได้ยินข่าวการเจาะรหัสบัตรเติมเงินและนำออกขายในประเทศไทย จนกลายเป็นข่าวใหญ่โตไปทั่วโลก ถึงขั้นถูกยกให้เป็นการโจรกรรมที่เหนือชั้นมากที่สุดคดีหนึ่งของโลก สาเหตุเพราะว่า มันไม่ใช่เรื่องง่ายเลยที่จะเจาะรหัสบัตรเติมเงิน หรือชุดรหัสด้านการเงินได้ เพราะชุดรหัสเหล่านี้มันมีการสร้างด้วยชุดรหัสผลิตภัณฑ์และชุดรหัสตรวจสอบที่ซับซ้อนมาก
ชุดรหัสผลิตภัณฑ์และชุดรหัสตรวจสอบ คืออะไร?
ก่อนที่จะตอบคำถามนี้ ผมขอออกตัวเอาไว้ก่อนนิดนึงนะครับว่า แท้จริงแล้วในการนำไปใช้งานมันอาจมีชุดรหัสที่มากกว่านี้ และซับซ้อนกว่านี้ แต่ผมจะกล่าวถึงเฉพาะชุดรหัสผลิตภัณฑ์และชุดรหัสตรวจสอบ สำหรับชุดรหัสผลิตภัณฑ์นั้นก็คือ ชุดตัวเลขประจำบัตรหรือผลิตภัณฑ์นั้นๆ ไม่ว่าจะเป็น ตัวเลขแทนชื่อผลิตภัณฑ์ มูลค่า ลำดับการออก วันเดือนปีที่ออก เป็นต้น ส่วนชุดรหัสตรวจสอบก็คือ ชุดตัวเลขที่ใช้ระบุว่าชุดรหัสผลิตภัณฑ์นั้นมีความถูกต้องหรือไม่ ซึ่งชุดรหัสตรวจสอบนี้จะอยู่ในตำแหน่งใดของชุดตัวเลขทั้งหมดก็ได้ ไม่จำเป็นต้องอยู่ติดกันด้วย จะมีเพียงโปรแกรมตรวจสอบของบริษัทเท่านั้นที่รู้และตรวจสอบได้ว่ามันเป็นชุดรหัสจริงหรือปลอม?
ตัวอย่างการใช้ ชุดรหัสผลิตภัณฑ์และชุดรหัสตรวจสอบ ในชีวิตจริง
สำหรับการใช้งานชุดรหัสผลิตภัณฑ์และชุดรหัสตรวจสอบที่เห็นได้ชัดและเปิดเผยได้ก็คือ เลขบัตรประจำตัวประชาชนของไทย และ ISBN ซึ่งจะเน้นไปที่ชุดรหัสผลิตภัณฑ์มากกว่า ส่วนชุดรหัสตรวจสอบจะมีแค่ 1 ตำแหน่ง เพราะผู้รับผิดชอบอาจเล็งเห็นว่าไม่สำคัญและเน้นไปที่เอาไว้ตรวจสอบความถูกต้องมากกว่าการป้องกันการเจาะรหัส
สำหรับเลขบัตรประชาชนของไทยที่มีอยู่ 13 หลัก จะมีชุดรหัสผลิตภัณฑ์หรือชุดตัวเลขแทนตัวบุคคล 12 หลัก และหลักสุดท้ายเป็นรหัสตรวจสอบ หรือเรียกว่า Check Digit ซึ่งความหมายของเลขบัตรประชาชนในแต่ละหลัก มีดังต่อไปนี้
- หลักที่ 1: ลักษณะหรือที่มาของการได้เป็นประชาชนไทย
- หลักที่ 2 และ 3: เลขประจำจังหวัดที่จดทะเบียน
- หลักที่ 4 และ 5: เลขประจำอำเภอที่เราไปจดทะเบียน
- หลักที่ 6 – 10: เลขประจำตัวในทะเบียนบ้าน
- หลักที่ 11 และ 12: เป็นการจัดลำดับว่าเป็นคนที่เท่าไรในบุคคลประเภทนั้นๆ
- หลักที่ 13 : รหัสตรวจสอบ หรือ Check Digit
ประเด็นสำคัญ ก็คือ หลักที่ 13 นี่หละครับ ทำให้เราเขียนเลขบัตรประชาชนขึ้นมามั่วๆ ไม่ได้ เมื่อเราใส่หลักที่ 1-12 แล้วต้องผ่านการตรวจสอบด้วย หลักที่ 13 ว่ามันถูกต้องหรือไม่ อย่างไรก็ตาม หลักตรวจสอบ หรือ Check Digit นี้ ไม่ได้มีวัตถุประสงค์ป้องกันการปลอมอย่างชัดเจน แต่มีวัตถุประสงค์เพื่อใช้ในการตรวจสอบว่าเลขบัตรประชาชนที่เรากรอกหรือส่งเข้าระบบมันถูกต้องหรือไม่? ทำให้เราไม่ต้องกังวลเรื่องผิดพลาดที่อาจเกิดขึ้น แล้วมันมีวิธีตรวจสอบอย่างไร?
การตรวจสอบเลขบัตรประชาชนว่ามีความถูกต้องหรือไม่? ทำได้โดยอาศัยรหัสตรวจสอบเป็นตัวเช็ค นั่นคือ นำหลักที่ 1 – 12 มาคำนวณตามสูตร ว่าจะได้ผลออกมาเป็นหลักที่ 13 หรือไม่?
ตัวอย่างเลขบัตรประชาชน 5-4415-00023-20-2 ซึ่ง Check Digit ของรหัสประชาชนนี้คือเลข 2
- นำเลขในหลักที่ 1 – 12 มาเขียนแยกหลักกันก่อน จะได้ 544150002320
- นำเลขทั้ง 12 ตัว มาดำเนินการโดยในแต่ละหลัก คูณเข้ากับเลขประจำหลักของมันแล้วนำมาบวกกันทั้งหมด จากเลขบัตร 544150002320 จะได้ 5×13+4×12+4×11+1×10+5×9+0x8+0x7+0x6+2×5+3×4+2×3+0x2 = 240
- นำผลลัพธ์ที่ได้มา mod 11 (หารเอาเศษ) จะได้ 240 mod 11 = 9
- เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 3 จะได้ 11 – 9 = 2 (จะได้ 2 เป็นเลขในหลัก Check Digit) แต่หาก ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit
ส่วนเลข ISBN ที่เป็นชุดรหัสแทนหนังสือหรือสิ่งพิมพ์ต่างๆ ในโลกนี้ก็ทำคล้ายๆ กับเลขบัตรประจำตัวประชาชนของเราครับ จะต่างกันที่วิธีการคำนวณหารหัสตรวจสอบนั่นเอง ตัวอย่างเช่น ISBN 0 8 4 3 6 1 0 7 2 7 ชุดตัวเลข 9 หลักแรกเป็นตัวเลขประจำตัวของหนังสือเล่มนั้นๆ แต่หลักสุดท้ายเป็นรหัสตรวจสอบ ซึ่งมีวิธีคำนวณหารหัสตรวจสอบโดยการนำตัวเลข 9 ตัวแรก แต่ละหลักคูณกับเลขประจำตำแหน่ง ตั้งแต่ 10 จนถึง 2 แล้วนำมาบวกกันทั้งหมด จากนั้นนำไป mod กับ 11 (หารด้วย 11 เอาเศษที่ได้มาใช้งาน) ก็จะได้ตัวเลขที่เป็นรหัสตรวจสอบตัวสุดท้าย แต่ถ้า mod แล้วได้เลข 10 ก็จะใช้ตัวอักษร X แทนครับ ตัวอย่างเช่น ISBN 0 8 4 3 6 1 0 7 2 7
0 x 10 + 8 x 9 + 4 x 8 + 3 x7 + 6 x 6 + 1 x 5 + 0 x4 + 7 x 3 + 2 x 2 = 191 เมื่อนำไป mod กับ 11 จะได้ตัวเลขเป็น 4 สุดท้ายให้นำ 11 – 4 = 7 ก็จะได้รหัสตรวจสอบตัวสุดท้ายครับ นั่นคือ ISBN 0 8 4 3 6 1 0 7 2 7 ถูกต้องแล้วนั่นเอง
สำหรับวิธีการข้างต้นนี้เป็นวิธีการหารหัสตรวจสอบเพื่อสร้างชุดรหัสประจำตัวบุคคลหรือสินค้า แต่สำหรับวิธีการเช็คด้วยโปรแกรมคอมพิวเตอร์จะง่ายกว่านี้มากครับ แค่นำชุดตัวเลขทุกตัว(รวมรหัสตรวจสอบ)ไปคูณกับเลขประจำหลัก แล้วดูว่าผลรวมหาร 11 ลงตัวหรือไม่เท่านั้นเอง
ตัวอย่างที่ยกมานี้เป็นการสร้างชุดตัวเลขที่ง่ายๆ แต่สำหรับชุดรหัสด้านการเงินนั้น ไม่ได้ง่ายแบบนี้แน่นอน รหัสตรวจสอบจะมีมากกว่า 1 หลัก และวิธีคำนวณก็จะซับซ้อนมากกว่าการบวกและคูณ จะใช้ฟังก์ชันทางคณิตศาสตร์ที่ยากๆ เข้าไว้ แต่ก็ไม่ใช่ว่ายากเกินไปจนโปรแกรมตัวสอบทำงานช้า ตอบสนองลูกค้าได้ไม่ดีนะครับ
ทั้งหมดนี้เพื่อที่จะบอกว่ามันไม่ง่ายเลยที่จะมีมิจฉาชีพมาถอดรหัสหรือเจาะรหัสด้านการเงินของเรา ไม่ว่าจะเป็นบัญชีธนาคาร รหัสบัตรเครดิต บัตรเติมเงิน หรืออื่นๆ อีกมากมาย และผลพลอยได้อีกอย่างหนึ่งก็คือ เราไม่ต้องกลัวว่าเราจะบอกเลขบัญชีหรือรหัสผิดจนเพื่อนเราโอนผิดไปให้คนอื่น เพราะยังไงโปรแกรมตรวจสอบมันจะรู้ว่ารหัสเราผิดครับ ยกเว้นเราจะบอกผิดหลายตำแหน่งมากเกินไป ซึ่งเกิดขึ้นได้น้อยมาก