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