ความยาวเลขประจำตัวของแต่ละประเทศไม่ได้อยู่ภายใต้มาตรฐานสากลเดียวกัน แต่ละประเทศออกแบบหมายเลขของตนตามระบบทะเบียนราษฎรของตน จึงมีทั้งแบบสั้นเพียงไม่กี่หลักและแบบยาวกว่าสิบหลัก บทความนี้จะพาคุณดูว่าความหลากหลายนี้หน้าตาเป็นอย่างไร ทำไมการเขียนกฎเดียวใช้กับทุกประเทศจึงมักพัง และถ้าคุณเป็นคนทำระบบ จะออกแบบช่องรับข้อมูลนี้ให้ปลอดภัยได้อย่างไร
เลขประจำตัวแบบตัวเลขล้วนกับแบบผสมต่างกันอย่างไร?
แบบแรกคือหมายเลขที่ใช้เฉพาะตัวเลขสิบตัว ข้อดีของมันคือพิมพ์ง่าย จำง่าย และไม่ค่อยมีปัญหาเรื่องอักษรที่หน้าตาคล้ายกัน แต่ข้อเสียคือเมื่อจำนวนประชากรมากขึ้น จำนวนหลักก็ต้องเพิ่มขึ้นตามไปด้วย
แบบที่สองคือหมายเลขที่ผสมตัวอักษรเข้าไปด้วย เพื่อให้ได้จำนวนชุดหมายเลขมากขึ้นโดยไม่ต้องเพิ่มความยาว ตัวอย่างที่คุ้นเคยคือหมายเลขที่ขึ้นต้นด้วยตัวอักษรหนึ่งหรือสองตัวแล้วตามด้วยตัวเลข แต่การผสมตัวอักษรสร้างปัญหาใหม่ทันที นั่นคือตัวอักษรบางตัวหน้าตาเหมือนตัวเลข และเมื่อผู้ใช้พิมพ์ผิดก็ยากที่ระบบจะจับได้
แบบที่สามคือหมายเลขที่สลับที่ระหว่างตัวอักษรกับตัวเลขในตำแหน่งที่ต่างกันไปในแต่ละประเทศ ซึ่งทำให้การตรวจด้วยวิธีเทียบรูปแบบคงที่ใช้ไม่ได้เลย
ตารางข้างล่างนี้เป็นภาพรวมของความหลากหลาย โดยไม่ต้องอาศัยตัวเลขเฉพาะของประเทศใด
| ลักษณะของหมายเลข | สิ่งที่ต้องระวัง |
|---|---|
| ตัวเลขล้วน | ความยาวเพิ่มขึ้นได้ในอนาคตเมื่อประชากรมากขึ้น |
| ตัวอักษรปนตัวเลข | ตัวอักษรที่หน้าตาคล้ายตัวเลขทำให้พิมพ์ผิดง่าย |
| มีตัวอักษรตรวจสอบท้ายหมายเลข | ตัวอักษรตัวสุดท้ายคำนวณจากตัวอื่น ไม่ใช่ค่าที่เพิ่มเข้ามา |
| ฝังวันเกิดไว้ในหลักต้น ๆ | วันเกิดแบบสั้นใช้เพียงสองหลักของปี จึงกำกวมระหว่างศตวรรษ |
| มีเครื่องหมายคั่นตามตำแหน่ง | เครื่องหมายคั่นเป็นเพียงธรรมเนียมการเขียน ไม่ใช่ส่วนของหมายเลข |
ตัวอักษรตรวจสอบท้ายหมายเลขคืออะไร?
หลายประเทศใส่ค่าตรวจสอบไว้ที่ตำแหน่งท้ายหมายเลข ค่านี้ไม่ใช่ข้อมูลใหม่ แต่คำนวณมาจากหลักอื่นด้วยวิธีทางคณิตศาสตร์แบบง่าย เช่นการนำหลักต่าง ๆ มาคูณกับน้ำหนักที่ต่างกัน แล้วนำผลรวมไปหาค่าคงที่ค่าหนึ่ง
ประโยชน์หลักคือจับความผิดพลาดที่เกิดจากการพิมพ์ผิดหนึ่งหลักและการสลับตำแหน่งของตัวเลขสองตัวที่อยู่ติดกัน ซึ่งเป็นความผิดพลาดที่คนทำมากที่สุด การมีค่าตรวจสอบจึงช่วยกรองข้อมูลที่พิมพ์ผิดได้ก่อนที่จะเสียเวลาไปตรวจกับต้นทาง
สิ่งที่ต้องเข้าใจให้ถูกคือการที่หมายเลขผ่านการตรวจค่าตรวจสอบ ไม่ได้แปลว่าหมายเลขนั้นเป็นของคนจริง และไม่ได้แปลว่าหน่วยงานต้นทางจะยอมรับมัน การผ่านค่าตรวจสอบบอกเพียงว่าองค์ประกอบภายในของหมายเลขสอดคล้องกันเองเท่านั้น
ทำไมประเทศเดียวกันอาจมีหมายเลขมากกว่าหนึ่งรูปแบบ?
เหตุผลข้อแรกคือการเปลี่ยนระบบ เมื่อประเทศปรับปรุงระบบทะเบียน หมายเลขแบบใหม่จะเริ่มออกให้คนรุ่นใหม่ ขณะที่คนรุ่นก่อนยังถือหมายเลขแบบเดิมอยู่ไปตลอดชีวิต ในช่วงเปลี่ยนผ่าน ระบบราชการจึงต้องรองรับทั้งสองแบบพร้อมกัน
เหตุผลข้อที่สองคือประเภทของหมายเลข บางประเทศมีหมายเลขสำหรับพลเมือง มีหมายเลขสำหรับผู้พำนักถาวร และมีหมายเลขสำหรับผู้ที่ไม่ได้ถือสัญชาติ ซึ่งหน้าตาและความยาวอาจต่างกัน
เหตุผลข้อที่สามคือหมายเลขบางประเภทมีอายุการใช้งาน ตัวอย่างที่เห็นได้ชัดคือหมายเลขผู้เสียภาษีที่บางประเทศออกให้เป็นครั้งคราวและมีรูปแบบต่างจากเลขประจำตัวประชาชน
ผลที่ตามมาสำหรับคนทำระบบคือ กฎตรวจสอบเดียวต่อหนึ่งประเทศไม่เพียงพอ คุณต้องรู้ว่ากำลังตรวจหมายเลขประเภทใดด้วย
ตรวจความยาวตายตัวแล้วพังตรงไหน?
คำตอบคือพังตรงที่ข้อมูลของประเทศอื่นเข้ามาในระบบ ตัวอย่างที่พบบ่อยคือการกำหนดช่องให้เก็บได้ไม่เกินสิบหลักเพราะประเทศแรกที่ทีมรองรับใช้สิบหลัก เมื่อขยายไปยังประเทศที่มีหมายเลขยาวกว่านั้น ระบบจะตัดข้อมูลทิ้งเงียบ ๆ โดยไม่แจ้งข้อผิดพลาด
ความเสียหายแบบที่สองคือการปฏิเสธข้อมูลที่ถูกต้อง เมื่อกำหนดว่าต้องเป็นตัวเลขล้วน ผู้ใช้ที่มีหมายเลขผสมตัวอักษรจะกรอกไม่ได้เลย แม้ข้อมูลของเขาจะถูกต้องสมบูรณ์
ความเสียหายแบบที่สามคือการตีความผิด เมื่อระบบเดาว่าตำแหน่งใดคือปีเกิด แล้วนำไปคำนวณอายุต่อ ความผิดพลาดจะลามไปยังทุกส่วนที่ใช้ค่านั้น
สำหรับนักพัฒนา: อย่าผูกความยาวกับประเทศเดียว
ข้อแรกคือแยกความยาวสูงสุดออกจากความยาวที่คาดหวัง ช่องเก็บข้อมูลควรกว้างพอสำหรับทุกประเทศที่คุณรองรับ ส่วนการตรวจความยาวที่แน่นอนให้ผูกกับประเทศที่ผู้ใช้เลือก
ข้อที่สองคือทำตารางกฎต่อประเทศ ไม่ใช่ชุดเงื่อนไขที่เขียนเรียงกันในที่เดียว การมีตารางทำให้เพิ่มประเทศใหม่ได้โดยไม่ต้องแก้ตรรกะเดิม
ข้อที่สามคือเตรียมทางออกสำหรับกรณีที่ไม่รู้จักรูปแบบ โลกนี้มีประเทศมากกว่ารายการที่คุณรองรับเสมอ จึงควรมีเส้นทางที่ยอมรับค่าที่ไม่ตรงกับกฎใด แล้วทำเครื่องหมายว่าเป็นค่าที่ตรวจไม่ได้ แทนที่จะปฏิเสธทันที
ข้อที่สี่คือเก็บค่าที่ผู้ใช้พิมพ์ไว้ตามเดิม และแยกส่วนที่จัดรูปแบบเพื่อการแสดงผลออกจากกัน เพราะเมื่อตัดเครื่องหมายคั่นทิ้งไปแล้ว บางประเทศจะไม่เหลือข้อมูลให้ตรวจเลย
ข้อที่ห้าคือทดสอบด้วยหมายเลขที่ยาวที่สุดและสั้นที่สุดที่คุณรองรับ แล้วบวกกรณีที่ไม่มีหมายเลขเลย เพราะช่องนี้มักเป็นช่องบังคับทั้งที่ข้อมูลของบางประเทศไม่มีค่าให้กรอก
ก้าวต่อไป
ถ้าคุณไม่มีข้อมูลว่าประเทศที่รองรับใช้หมายเลขแบบใด ลองเริ่มจากดูตัวอย่างในหน้าประเทศบราซิล แล้วเทียบกับประเทศที่ใกล้เคียงก่อน วิธีนี้ช่วยให้เห็นความแตกต่างได้เร็ว
ในเครื่องมือสร้างข้อมูลตัวตนของเว็บไซต์นี้ คุณเลือกประเทศแล้วได้ข้อมูลที่ตรงตามรูปแบบของประเทศนั้นทันที และถ้าคุณอยากเข้าใจว่าช่องต่าง ๆ ควรสอดคล้องกันอย่างไร อ่านต่อได้ที่ความสอดคล้องของช่องข้อมูลตัวตน
ข้อมูลทุกชุดที่กล่าวถึงในบทความนี้เป็นข้อมูลที่สังเคราะห์ขึ้น ไม่ตรงกับบุคคลหรือหมายเลขจริงใด และใช้ได้เฉพาะกับงานทดสอบซอฟต์แวร์เท่านั้น