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