รูปแบบหมายเลขบัตรเครดิตไม่ใช่เพียงตัวเลขเรียงต่อกัน แต่เป็นโครงสร้างที่มีความหมายซ่อนอยู่ในทุกช่วงหลัก ตั้งแต่หลักแรกที่บอกว่าบัตรอยู่ในกลุ่มการใช้งานใด ไปจนถึงหลักสุดท้ายที่เป็นหลักตรวจสอบ บทความนี้จะพาคุณอ่านหมายเลขบัตรทีละส่วน ทำความเข้าใจว่าทำไมความยาวจึงไม่เท่ากันเสมอ และชี้จุดที่ฟอร์มรับข้อมูลมักทำพลาดจนผู้ใช้กรอกบัตรที่ถูกต้องไม่ได้
รูปแบบหมายเลขบัตรเครดิตประกอบด้วยกี่ส่วน?
โดยหลักการ หมายเลขบัตรหนึ่งหมายเลขประกอบด้วยสามส่วนเรียงต่อกัน ส่วนแรกคือหมายเลขระบุผู้ออกบัตร ซึ่งเป็นคำนำหน้าที่ยาวหลายหลัก ทำหน้าที่บอกระบบเส้นทางว่าบัตรใบนี้อยู่ในเครือข่ายใด ส่วนที่สองคือกลุ่มหลักบัญชีที่ผู้ออกบัตรกำหนดขึ้นเองเพื่อไม่ให้ซ้ำกับบัตรใบอื่น และส่วนที่สามคือหลักตรวจสอบหนึ่งหลักที่คำนวณจากหลักทั้งหมดข้างหน้า
คำนำหน้าของผู้ออกบัตรเคยถูกเรียกกันทั่วไปว่าหมายเลขระบุธนาคาร แต่การเรียกแบบนั้นทำให้เข้าใจผิดในปัจจุบัน เพราะคำนำหน้าบอกได้ในระดับเครือข่ายบัตรและบางครั้งบอกได้ในระดับผลิตภัณฑ์ ไม่ได้แปลว่าคำนำหน้าหนึ่ง ๆ ต้องผูกกับธนาคารเดียวตลอดไป ธนาคารหลายแห่งใช้คำนำหน้าร่วมกัน และบางช่วงคำนำหน้าก็ถูกใช้โดยสถาบันหลายรายพร้อมกัน
ด้วยเหตุนี้จึงไม่ควรสรุปว่าตัวเลขที่ผ่านการตรวจชุดหนึ่ง “เป็นของ” ธนาคารใด เป็นเพียงการเดาจากช่วงหมายเลขที่รู้จักเท่านั้น และการเดานั้นผิดได้เสมอ
ตัวเลขหลักแรกบอกอะไรเกี่ยวกับบัตร
หลักแรกของหมายเลขบัตรคือตัวบ่งชี้กลุ่มการใช้งานตามแผนการจัดสรรหมายเลขที่เป็นสาธารณะ ไม่ใช่ความลับของระบบใด ตารางต่อไปนี้สรุปความหมายกว้าง ๆ ที่พบได้บ่อย
| หลักแรก | กลุ่มการใช้งานโดยทั่วไป |
|---|---|
| 4 และ 5 | บัตรชำระเงินของเครือข่ายขนาดใหญ่ |
| 3 | กลุ่มท่องเที่ยวและบันเทิง ซึ่งมีทั้งบัตรเครดิตและบัตรเดบิต |
| 6 | บัตรของเครือข่ายที่เน้นหลายตลาดรวมถึงบัตรเดบิต |
| 1 และ 2 | ใช้ในอุตสาหกรรมการบินเป็นหลัก |
| 7 | ใช้ในธุรกิจน้ำมันและสถานีบริการเชื้อเพลิง |
| 8 | ใช้ในกลุ่มโทรคมนาคม |
| 9 | สงวนไว้สำหรับการจัดสรรในระดับประเทศ |
การรู้ว่าหลักแรกหมายถึงกลุ่มใดช่วยให้คุณอ่านข้อความแจ้งเตือนของระบบได้เข้าใจขึ้น เช่น เมื่อหน้าเว็บบอกว่าไม่รองรับเครือข่ายบัตรของหมายเลขที่กรอก คุณจะพอเดาได้ว่าปัญหาอยู่ที่ตัวเลขหลักใด ไม่ใช่ที่ช่องกรอกอื่น
ทำไมความยาวของหมายเลขบัตรจึงไม่เท่ากัน?
ภาพจำที่คนส่วนใหญ่มีคือหมายเลขสิบหกหลัก แต่ความจริงคือความยาวที่ใช้จริงมีตั้งแต่สิบสามหลักไปจนถึงสิบเก้าหลัก ขึ้นอยู่กับเครือข่ายบัตรและชนิดผลิตภัณฑ์ มาตรฐานหมายเลขบัญชีที่เกี่ยวข้องกำหนดเพดานความยาวไว้ที่สิบเก้าหลัก ส่วนกลุ่มที่พบบ่อยที่สุดคือสิบสาม สิบสี่ สิบห้า และสิบหกหลัก
การยึดติดกับความยาวเดียวจะทำให้ระบบของคุณปฏิเสธบัตรที่ถูกต้องบางประเภทโดยไม่จำเป็น และปัญหาแบบนี้มักไม่ถูกพบตอนพัฒนา เพราะทีมใช้ตัวอย่างจากบัตรที่ตนเองถืออยู่เป็นหลัก
แนวปฏิบัติที่ปลอดภัยคือยอมรับช่วงความยาวที่กว้างตามเครือข่ายบัตรที่คุณรองรับ แล้วปล่อยให้การตรวจคำนำหน้าและการอนุมัติเป็นตัวตัดสินขั้นสุดท้าย รายละเอียดของแต่ละเครือข่ายพร้อมช่วงคำนำหน้าอยู่ในบทความเรื่องบัตรทดสอบแยกตามเครือข่าย
พิมพ์ช่องว่างหรือขีดกลางในหมายเลขบัตรได้ไหม?
ในทางเทคนิค ตัวคั่นไม่ใช่ส่วนหนึ่งของหมายเลขบัตรเลย ไม่ว่าจะเป็นช่องว่าง ขีดกลาง หรือจุด พวกมันมีไว้เพื่อให้คนอ่านตัวเลขยาว ๆ ได้สะดวกขึ้นเท่านั้น เมื่อหมายเลขถูกส่งเข้าระบบประมวลผล ตัวคั่นทั้งหมดต้องถูกตัดออกก่อน
แต่ในทางประสบการณ์ผู้ใช้ ผู้คนพิมพ์ตัวคั่นเข้ามาเป็นปกติ เพราะคัดลอกจากใบเสร็จ จากอีเมล หรือจากหน้าเว็บของธนาคารที่จัดกลุ่มตัวเลขไว้แล้ว ฟอร์มที่ปฏิเสธทันทีเพียงเพราะเจอช่องว่างจึงสร้างความหงุดหงิดโดยไม่จำเป็น
แนวทางที่สมดุลคือตัดตัวคั่นออกเงียบ ๆ แล้วตรวจว่าส่วนที่เหลือเป็นตัวเลขล้วนหรือไม่ ถ้ามีอักขระอื่นปนอยู่จึงค่อยแจ้งเตือน การจัดกลุ่มตัวเลขให้อ่านง่ายระหว่างพิมพ์ก็เป็นวิธีที่ดี แต่ต้องเป็นการจัดกลุ่มเพื่อการแสดงผลเท่านั้น ไม่ใช่ค่าที่เก็บจริง
หมายเลขที่เห็นบนบัตรไม่เหมือนที่ระบบเก็บ
มีอีกจุดหนึ่งที่อ่านแล้วมักประหลาดใจ คือรูปแบบที่พิมพ์บนหน้าบัตรกับรูปแบบที่ระบบเก็บไว้ภายในไม่จำเป็นต้องเหมือนกัน หน้าบัตรแสดงตัวเลขให้มนุษย์อ่าน ส่วนระบบเก็บค่าที่เป็นตัวเลขล้วนไม่มีตัวคั่น เพื่อให้เปรียบเทียบและค้นหาได้แม่นยำ
ความต่างนี้ไม่ใช่ความผิดพลาด แต่เป็นเรื่องปกติของการออกแบบระบบ และเป็นสาเหตุที่ต้องระวังเวลาเขียนไฟล์ส่งออก เพราะตัวคั่นที่หลุดเข้าไปในคอลัมน์จะทำให้การจับคู่ข้อมูลล้มเหลวแบบเงียบ ๆ
สำหรับนักพัฒนา: ทำความสะอาดข้อมูลนำเข้าก่อนตรวจความยาว
ลำดับการทำงานที่แนะนำในส่วนรับข้อมูลมีดังนี้
- ตัดอักขระที่ไม่ใช่ตัวเลขออกก่อน แล้วจึงตรวจว่ามีอะไรเหลืออยู่หรือไม่
- ปฏิเสธสตริงว่างหลังการทำความสะอาดทันที โดยไม่ต้องรอถึงขั้นตอนอื่น
- ตรวจความยาวโดยยึดช่วงตามเครือข่ายบัตร ไม่ใช่ยึดค่าคงที่ค่าเดียว
- ตรวจคำนำหน้าเทียบกับรายการเครือข่ายที่ระบบรองรับจริง และแจ้งให้ชัดว่าไม่รองรับเครือข่ายใด
- คำนวณหลักตรวจสอบด้วยขั้นตอนวิธี Luhnเป็นด่านสุดท้ายของการตรวจรูปแบบ
- เก็บค่าที่ทำความสะอาดแล้วลงฐานข้อมูลเสมอ ไม่เก็บสำเนาที่มีตัวคั่น
ข้อควรระวังอีกเรื่องคือการจัดกลุ่มตัวเลขเพื่อแสดงผลต้องไม่ย้อนกลับไปแก้ค่าที่ผู้ใช้กรอกจริง เพราะจะทำให้เกิดการนับตำแหน่งผิดเมื่อระบบต้องจัดการกับข้อมูลจำนวนมากในเวลาเดียวกัน
สร้างหมายเลขตามเครือข่ายที่ต้องการ
เมื่อคุณต้องทดสอบว่าฟอร์มรองรับความยาวและคำนำหน้าครบทุกแบบ เครื่องมือสร้างหมายเลขบัตรบนเว็บไซต์นี้ให้คุณเลือกเครือข่ายบัตรและจำนวนที่ต้องการ แล้วได้ชุดตัวเลขที่โครงสร้างถูกต้องพร้อมใช้ทันที ตัวเลขทุกใบเป็นข้อมูลสมมติที่ไม่ผูกกับบัญชีใดและไม่เคยถูกออกให้กับใคร จึงเหมาะสำหรับการทดสอบซอฟต์แวร์เท่านั้น
หากงานของคุณต้องเทียบพฤติกรรมระหว่างช่องกรอกวันหมดอายุกับหมายเลขบัตรไปพร้อมกัน ควรอ่านรูปแบบวันหมดอายุบัตรเครดิตเพิ่มเติม เพราะทั้งสองช่องมีกับดักด้านการจัดรูปแบบที่คล้ายกัน
ก้าวต่อไป
เมื่อคุณเข้าใจโครงสร้างของหมายเลขบัตรแล้ว ขั้นถัดไปที่ให้ผลชัดที่สุดคือตรวจสอบว่าระบบของคุณยอมรับความยาวทุกแบบที่ควรยอมรับ ไม่ใช่แค่สิบหกหลักที่คุ้นเคย จากนั้นจึงทดลองสร้างชุดตัวเลขตามเครือข่ายที่คุณรองรับ แล้วไล่ป้อนเข้าฟอร์มจริงด้วยมือสักสองสามรอบ ความผิดพลาดด้านรูปแบบส่วนใหญ่จะโผล่ขึ้นมาทันทีในขั้นตอนนี้ และถ้าต้องการข้อมูลตั้งต้นจำนวนมากสำหรับงานทดสอบ เครื่องมือบนเว็บไซต์นี้ก็สร้างให้ได้ครั้งละหลายสิบใบเช่นกัน