เมนู

การตรวจสอบหมายเลข: หลักการและหลักตรวจสอบ

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

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

  • การตรวจสอบหมายเลข
  • หลักตรวจสอบ
  • ข้อมูลทดสอบ

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

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

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

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

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

สามชั้นที่กรองคนละแบบ

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

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

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

ทำไมรูปแบบถูกต้องจึงยังไม่แปลว่าหมายเลขจริง?

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

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

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

หมายเลขหนึ่งอาจเข้าได้กับหลายระบบ

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

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

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

ปรับรูปแบบก่อนตรวจ: ช่องว่าง ขีดกลาง และตัวพิมพ์

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

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

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

คำตอบสี่แบบที่ต้องแยกให้ออก

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

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

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

สำหรับนักพัฒนา: แบ่งชั้นของขั้นตอนตรวจสอบ

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

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

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

ก้าวต่อไป

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

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

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

อ่านต่อ

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