เมนู

การตรวจสอบเลขประจำตัวของแต่ละประเทศ

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

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

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

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

เลขประจำตัวของแต่ละประเทศตรวจรวมเป็นชุดเดียวไม่ได้เพราะอะไร?

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

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

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

ระบบที่ประกาศหลักตรวจสอบอย่างเป็นทางการ

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

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

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

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

ระบบที่มีเพียงรูปแบบ แต่ไม่มีสูตรให้คำนวณ

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

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

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

เมื่อหมายเลขหนึ่งเข้าข่ายหลายประเทศควรทำอย่างไร?

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

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

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

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

ความยาวและชุดอักขระเป็นเพียงจุดเริ่มต้น

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

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

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

สำหรับนักพัฒนา: เก็บกฎไว้เป็นข้อมูล ไม่ใช่ตรรกะ

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

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

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

ก้าวต่อไป

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

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

อ่านต่อ

บทความเกี่ยวกับ ตรวจสอบเลขบัตรประชาชน