เมนู

ความยาวเลขประจำตัวของแต่ละประเทศ ไม่มีมาตรฐานเดียว

เลขประจำตัวของแต่ละประเทศยาวไม่เท่ากันและใช้อักขระต่างชนิดกัน บทความนี้อธิบายว่าทำไมการกำหนดความยาวตายตัวจึงพังกับข้อมูลข้ามประเทศ และควรออกแบบช่องรับข้อมูลอย่างไรให้ยืดหยุ่นพอ

เผยแพร่เมื่อ

  • ข้อมูลทดสอบ
  • เลขประจำตัว

ความยาวเลขประจำตัวของแต่ละประเทศไม่ได้อยู่ภายใต้มาตรฐานสากลเดียวกัน แต่ละประเทศออกแบบหมายเลขของตนตามระบบทะเบียนราษฎรของตน จึงมีทั้งแบบสั้นเพียงไม่กี่หลักและแบบยาวกว่าสิบหลัก บทความนี้จะพาคุณดูว่าความหลากหลายนี้หน้าตาเป็นอย่างไร ทำไมการเขียนกฎเดียวใช้กับทุกประเทศจึงมักพัง และถ้าคุณเป็นคนทำระบบ จะออกแบบช่องรับข้อมูลนี้ให้ปลอดภัยได้อย่างไร

เลขประจำตัวแบบตัวเลขล้วนกับแบบผสมต่างกันอย่างไร?

แบบแรกคือหมายเลขที่ใช้เฉพาะตัวเลขสิบตัว ข้อดีของมันคือพิมพ์ง่าย จำง่าย และไม่ค่อยมีปัญหาเรื่องอักษรที่หน้าตาคล้ายกัน แต่ข้อเสียคือเมื่อจำนวนประชากรมากขึ้น จำนวนหลักก็ต้องเพิ่มขึ้นตามไปด้วย

แบบที่สองคือหมายเลขที่ผสมตัวอักษรเข้าไปด้วย เพื่อให้ได้จำนวนชุดหมายเลขมากขึ้นโดยไม่ต้องเพิ่มความยาว ตัวอย่างที่คุ้นเคยคือหมายเลขที่ขึ้นต้นด้วยตัวอักษรหนึ่งหรือสองตัวแล้วตามด้วยตัวเลข แต่การผสมตัวอักษรสร้างปัญหาใหม่ทันที นั่นคือตัวอักษรบางตัวหน้าตาเหมือนตัวเลข และเมื่อผู้ใช้พิมพ์ผิดก็ยากที่ระบบจะจับได้

แบบที่สามคือหมายเลขที่สลับที่ระหว่างตัวอักษรกับตัวเลขในตำแหน่งที่ต่างกันไปในแต่ละประเทศ ซึ่งทำให้การตรวจด้วยวิธีเทียบรูปแบบคงที่ใช้ไม่ได้เลย

ตารางข้างล่างนี้เป็นภาพรวมของความหลากหลาย โดยไม่ต้องอาศัยตัวเลขเฉพาะของประเทศใด

ลักษณะของหมายเลข สิ่งที่ต้องระวัง
ตัวเลขล้วน ความยาวเพิ่มขึ้นได้ในอนาคตเมื่อประชากรมากขึ้น
ตัวอักษรปนตัวเลข ตัวอักษรที่หน้าตาคล้ายตัวเลขทำให้พิมพ์ผิดง่าย
มีตัวอักษรตรวจสอบท้ายหมายเลข ตัวอักษรตัวสุดท้ายคำนวณจากตัวอื่น ไม่ใช่ค่าที่เพิ่มเข้ามา
ฝังวันเกิดไว้ในหลักต้น ๆ วันเกิดแบบสั้นใช้เพียงสองหลักของปี จึงกำกวมระหว่างศตวรรษ
มีเครื่องหมายคั่นตามตำแหน่ง เครื่องหมายคั่นเป็นเพียงธรรมเนียมการเขียน ไม่ใช่ส่วนของหมายเลข

ตัวอักษรตรวจสอบท้ายหมายเลขคืออะไร?

หลายประเทศใส่ค่าตรวจสอบไว้ที่ตำแหน่งท้ายหมายเลข ค่านี้ไม่ใช่ข้อมูลใหม่ แต่คำนวณมาจากหลักอื่นด้วยวิธีทางคณิตศาสตร์แบบง่าย เช่นการนำหลักต่าง ๆ มาคูณกับน้ำหนักที่ต่างกัน แล้วนำผลรวมไปหาค่าคงที่ค่าหนึ่ง

ประโยชน์หลักคือจับความผิดพลาดที่เกิดจากการพิมพ์ผิดหนึ่งหลักและการสลับตำแหน่งของตัวเลขสองตัวที่อยู่ติดกัน ซึ่งเป็นความผิดพลาดที่คนทำมากที่สุด การมีค่าตรวจสอบจึงช่วยกรองข้อมูลที่พิมพ์ผิดได้ก่อนที่จะเสียเวลาไปตรวจกับต้นทาง

สิ่งที่ต้องเข้าใจให้ถูกคือการที่หมายเลขผ่านการตรวจค่าตรวจสอบ ไม่ได้แปลว่าหมายเลขนั้นเป็นของคนจริง และไม่ได้แปลว่าหน่วยงานต้นทางจะยอมรับมัน การผ่านค่าตรวจสอบบอกเพียงว่าองค์ประกอบภายในของหมายเลขสอดคล้องกันเองเท่านั้น

ทำไมประเทศเดียวกันอาจมีหมายเลขมากกว่าหนึ่งรูปแบบ?

เหตุผลข้อแรกคือการเปลี่ยนระบบ เมื่อประเทศปรับปรุงระบบทะเบียน หมายเลขแบบใหม่จะเริ่มออกให้คนรุ่นใหม่ ขณะที่คนรุ่นก่อนยังถือหมายเลขแบบเดิมอยู่ไปตลอดชีวิต ในช่วงเปลี่ยนผ่าน ระบบราชการจึงต้องรองรับทั้งสองแบบพร้อมกัน

เหตุผลข้อที่สองคือประเภทของหมายเลข บางประเทศมีหมายเลขสำหรับพลเมือง มีหมายเลขสำหรับผู้พำนักถาวร และมีหมายเลขสำหรับผู้ที่ไม่ได้ถือสัญชาติ ซึ่งหน้าตาและความยาวอาจต่างกัน

เหตุผลข้อที่สามคือหมายเลขบางประเภทมีอายุการใช้งาน ตัวอย่างที่เห็นได้ชัดคือหมายเลขผู้เสียภาษีที่บางประเทศออกให้เป็นครั้งคราวและมีรูปแบบต่างจากเลขประจำตัวประชาชน

ผลที่ตามมาสำหรับคนทำระบบคือ กฎตรวจสอบเดียวต่อหนึ่งประเทศไม่เพียงพอ คุณต้องรู้ว่ากำลังตรวจหมายเลขประเภทใดด้วย

ตรวจความยาวตายตัวแล้วพังตรงไหน?

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

ความเสียหายแบบที่สองคือการปฏิเสธข้อมูลที่ถูกต้อง เมื่อกำหนดว่าต้องเป็นตัวเลขล้วน ผู้ใช้ที่มีหมายเลขผสมตัวอักษรจะกรอกไม่ได้เลย แม้ข้อมูลของเขาจะถูกต้องสมบูรณ์

ความเสียหายแบบที่สามคือการตีความผิด เมื่อระบบเดาว่าตำแหน่งใดคือปีเกิด แล้วนำไปคำนวณอายุต่อ ความผิดพลาดจะลามไปยังทุกส่วนที่ใช้ค่านั้น

สำหรับนักพัฒนา: อย่าผูกความยาวกับประเทศเดียว

ข้อแรกคือแยกความยาวสูงสุดออกจากความยาวที่คาดหวัง ช่องเก็บข้อมูลควรกว้างพอสำหรับทุกประเทศที่คุณรองรับ ส่วนการตรวจความยาวที่แน่นอนให้ผูกกับประเทศที่ผู้ใช้เลือก

ข้อที่สองคือทำตารางกฎต่อประเทศ ไม่ใช่ชุดเงื่อนไขที่เขียนเรียงกันในที่เดียว การมีตารางทำให้เพิ่มประเทศใหม่ได้โดยไม่ต้องแก้ตรรกะเดิม

ข้อที่สามคือเตรียมทางออกสำหรับกรณีที่ไม่รู้จักรูปแบบ โลกนี้มีประเทศมากกว่ารายการที่คุณรองรับเสมอ จึงควรมีเส้นทางที่ยอมรับค่าที่ไม่ตรงกับกฎใด แล้วทำเครื่องหมายว่าเป็นค่าที่ตรวจไม่ได้ แทนที่จะปฏิเสธทันที

ข้อที่สี่คือเก็บค่าที่ผู้ใช้พิมพ์ไว้ตามเดิม และแยกส่วนที่จัดรูปแบบเพื่อการแสดงผลออกจากกัน เพราะเมื่อตัดเครื่องหมายคั่นทิ้งไปแล้ว บางประเทศจะไม่เหลือข้อมูลให้ตรวจเลย

ข้อที่ห้าคือทดสอบด้วยหมายเลขที่ยาวที่สุดและสั้นที่สุดที่คุณรองรับ แล้วบวกกรณีที่ไม่มีหมายเลขเลย เพราะช่องนี้มักเป็นช่องบังคับทั้งที่ข้อมูลของบางประเทศไม่มีค่าให้กรอก

ก้าวต่อไป

ถ้าคุณไม่มีข้อมูลว่าประเทศที่รองรับใช้หมายเลขแบบใด ลองเริ่มจากดูตัวอย่างในหน้าประเทศบราซิล แล้วเทียบกับประเทศที่ใกล้เคียงก่อน วิธีนี้ช่วยให้เห็นความแตกต่างได้เร็ว

ในเครื่องมือสร้างข้อมูลตัวตนของเว็บไซต์นี้ คุณเลือกประเทศแล้วได้ข้อมูลที่ตรงตามรูปแบบของประเทศนั้นทันที และถ้าคุณอยากเข้าใจว่าช่องต่าง ๆ ควรสอดคล้องกันอย่างไร อ่านต่อได้ที่ความสอดคล้องของช่องข้อมูลตัวตน

ข้อมูลทุกชุดที่กล่าวถึงในบทความนี้เป็นข้อมูลที่สังเคราะห์ขึ้น ไม่ตรงกับบุคคลหรือหมายเลขจริงใด และใช้ได้เฉพาะกับงานทดสอบซอฟต์แวร์เท่านั้น

อ่านต่อ

บทความเกี่ยวกับ เครื่องมือสร้างข้อมูลตัวตนและข้อมูลทดสอบออนไลน์

บทความเกี่ยวกับ เครื่องมือสร้างข้อมูลตัวตนและข้อมูลทดสอบออนไลน์

รายการนี้แสดงเฉพาะบทความในหัวข้อของหน้านี้