Định dạng số thẻ tín dụng không phải một dãy số ngẫu nhiên mà là một cấu trúc có quy tắc, trong đó mỗi nhóm chữ số đảm nhiệm một vai trò riêng. Người dùng chỉ nhìn thấy một dãy số in nổi trên tấm nhựa, nhưng hệ thống phía sau đọc được rất nhiều thông tin từ đó. Hiểu rõ cấu trúc này sẽ giúp bạn thiết kế ô nhập liệu dễ dùng hơn, viết phần kiểm tra chính xác hơn, và biết vì sao một số con số bị từ chối ngay trên máy của khách hàng.
Một số thẻ được ghép từ những phần nào?
Hãy tưởng tượng số thẻ như một câu được viết liền không dấu cách. Nó gồm ba đoạn nối tiếp nhau, và mỗi đoạn trả lời một câu hỏi khác nhau.
- Tiền tố tổ chức phát hành. Trước đây khái niệm này được gọi là BIN, ngày nay tài liệu chính thức dùng tên IIN. Đây là những chữ số đầu tiên, cho hệ thống định tuyến biết thẻ thuộc mạng thẻ nào và thường cả ngân hàng nào đã phát hành.
- Phần số tài khoản. Đây là phần thân do ngân hàng phát hành tự gán. Nhiệm vụ duy nhất của nó là không được trùng với bất kỳ thẻ nào khác trong cùng một dải số.
- Chữ số kiểm tra. Chữ số cuối cùng, được tính từ toàn bộ các chữ số phía trước bằng một phép cộng có quy tắc. Nhờ nó mà một lỗi gõ đơn lẻ bị phát hiện ngay lập tức.
Điều thú vị là độ dài của tiền tố không cố định với mọi tổ chức. Có những tổ chức phát hành dùng tiền tố dài hơn phần còn lại của ngành, nên khi viết phần nhận diện mạng thẻ, bạn không nên giả định rằng tiền tố luôn chiếm đúng một số chữ số nhất định. Cách kiểm tra an toàn hơn là so khớp theo tiền tố dài nhất có thể rồi mới rút ngắn dần.
Vì sao số thẻ không phải lúc nào cũng dài 16 chữ số?
Hầu hết mọi người hình dung một tấm thẻ có mười sáu chữ số, vì đó là độ dài phổ biến nhất mà họ gặp. Nhưng tiêu chuẩn quốc tế về cấu trúc số thẻ cho phép tổng độ dài lên tới mười chín chữ số, và trên thực tế các mạng thẻ dùng nhiều độ dài khác nhau: mười ba, mười bốn, mười lăm, mười sáu hoặc mười chín.
Vì vậy, bất kỳ đoạn kiểm tra nào chỉ chấp nhận duy nhất độ dài mười sáu sẽ chặn nhầm một lượng khách hàng thật. Đây là lỗi rất phổ biến trong các biểu mẫu do người mới làm quen với thanh toán viết ra, và nó chỉ lộ ra khi có người dùng thật cố gắng thanh toán bằng một tấm thẻ hợp lệ.
| Độ dài | Ghi chú thực tế |
|---|---|
| 13 chữ số | Vẫn tồn tại, thường gặp ở những dòng thẻ cũ |
| 14 chữ số | Ít phổ biến nhưng vẫn hợp lệ |
| 15 chữ số | Đặc trưng của một số mạng thẻ lớn |
| 16 chữ số | Phổ biến nhất hiện nay |
| 19 chữ số | Giới hạn trên của tiêu chuẩn, có mạng đã dùng |
Nếu bạn đang cần một dãy số đúng định dạng để thử biểu mẫu, trình tạo số thẻ tín dụng giả của trang này có thể sinh nhiều số thẻ thử theo từng mạng thẻ, và bạn cũng có thể dán một phần số thẻ đã biết để hệ thống điền nốt phần còn lại.
Chữ số đầu tiên nói lên điều gì?
Chữ số đầu tiên của số thẻ được gọi là chữ số nhận diện ngành. Nó không phải bí mật, mà là một phần của quy hoạch đánh số công khai, và nó cho biết sơ bộ lĩnh vực mà tấm thẻ thuộc về.
- Các chữ số thuộc nhóm thẻ tín dụng và ghi nợ phổ thông là bốn, năm và sáu.
- Nhóm phục vụ du lịch và giải trí dùng chữ số ba.
- Nhóm hàng không dùng chữ số một và hai.
- Nhóm xăng dầu dùng chữ số bảy, nhóm viễn thông dùng chữ số tám.
- Chữ số chín được dành cho mục đích phân bổ quốc gia.
Bạn không nên dùng chữ số nhận diện ngành để kết luận về một tấm thẻ cụ thể. Nó chỉ là điểm khởi đầu để thu hẹp khả năng, giống như nhìn vào mã vùng điện thoại để đoán một người đang ở đâu.
Hiển thị số thẻ thế nào cho vừa dễ đọc vừa an toàn?
Trên giao diện, số thẻ nên được nhóm lại thành từng khối để mắt người đọc theo dõi dễ hơn. Cách nhóm bốn chữ số một khối là quy ước phổ biến nhất, nhưng một số mạng thẻ có độ dài khác nên nhóm cuối cùng có thể ngắn hơn. Nếu bạn luôn chia đều thành các khối bốn chữ số, hãy xử lý riêng trường hợp khối cuối bị lẻ, nếu không giao diện sẽ hiển thị một khối trống hoặc dấu cách thừa ở cuối.
Khi số thẻ đã được lưu hoặc đang hiển thị lại cho người dùng xem, quy tắc chung của ngành là che phần giữa và chỉ để lộ nhóm chữ số đầu tiên cùng bốn chữ số cuối cùng. Cách này đủ để người dùng nhận ra thẻ của mình mà không phơi toàn bộ số. Điều quan trọng cần nhớ là một khi dữ liệu đã bị che, hệ thống thường không thể khôi phục lại số đầy đủ, nên hãy quyết định chỗ nào cần số gốc trước khi áp dụng quy tắc che.
Có thể nhận ra mạng thẻ ngay khi người dùng đang gõ không?
Có, và đây là một trong những cải thiện nhỏ nhưng đáng giá nhất cho biểu mẫu thanh toán. Khi người dùng vừa gõ vài chữ số đầu, hệ thống đã có thể đoán được mạng thẻ và hiển thị logo tương ứng bên cạnh ô nhập liệu. Cảm giác phản hồi tức thì này giúp người dùng yên tâm rằng họ đang đi đúng hướng.
Nhưng hãy cẩn thận với các trường hợp nhập nhằng. Có những dải tiền tố chồng lấn nhau giữa các mạng, và cũng có mạng thẻ dùng chung một chữ số đầu với mạng khác. Trong những trường hợp đó, logo có thể nhảy qua lại vài lần khi người dùng tiếp tục gõ. Đó không phải lỗi nghiêm trọng, nhưng nếu bạn dựa vào kết quả nhận diện này để đổi cả nhãn trường hay thay đổi vị trí ô nhập mã bảo mật, giao diện sẽ rung lắc khó chịu. Một cách xử lý phổ biến là chỉ cập nhật khi đã nhận diện chắc chắn, hoặc hiển thị logo mờ dần rồi mới cố định.
Phần dành cho nhà phát triển
Phần lớn lỗi trong xử lý số thẻ đến từ việc trộn lẫn ba việc khác nhau: làm sạch dữ liệu đầu vào, hiển thị cho người dùng, và truyền dữ liệu đi. Hãy giữ chúng tách biệt trong mã nguồn.
Vài điểm thực tế:
- Khi làm sạch dữ liệu đầu vào, hãy loại bỏ mọi ký tự không phải chữ số, bao gồm khoảng trắng, dấu gạch nối và cả những ký tự đặc biệt mà người dùng dán vào từ nơi khác. Việc dán số thẻ từ tin nhắn hoặc từ ứng dụng ngân hàng là hành vi rất phổ biến, và những chuỗi đó thường chứa ký tự ẩn.
- Đừng đặt giới hạn độ dài quá chặt ở ô nhập liệu. Nếu ô nhập chỉ cho phép mười sáu ký tự, khách hàng dùng thẻ mười chín chữ số sẽ không thể gõ hết. Hãy cho phép tối đa theo giới hạn của tiêu chuẩn rồi kiểm tra lại sau.
- Kiểm tra độ dài và kiểm tra tiền tố nên là hai bước riêng biệt, trả về hai thông báo lỗi khác nhau. Người dùng cần biết mình đã gõ thiếu chữ số hay đã chọn sai mạng thẻ.
- Cẩn thận với những chuỗi bắt đầu bằng số không. Nếu dữ liệu thử của bạn đi qua một định dạng trung gian coi số thẻ là số nguyên, số không ở đầu sẽ biến mất và dãy số sẽ lệch đi một vị trí. Luôn xử lý số thẻ như chuỗi ký tự.
- Khi lưu dữ liệu thẻ để hiển thị, hãy nghĩ trước về việc bạn có thật sự cần dãy số đầy đủ hay không. Nếu chỉ cần hiển thị lại, việc lưu dạng đã che sẽ giảm đáng kể rủi ro mà không ảnh hưởng đến trải nghiệm.
- Với dữ liệu thử, hãy phủ đủ các độ dài và các mạng thẻ khác nhau. Một bộ dữ liệu chỉ gồm thẻ mười sáu chữ số sẽ không bao giờ phát hiện ra lỗi giới hạn độ dài.
Mọi số thẻ do công cụ sinh ra đều đúng cấu trúc, hợp lệ theo phép kiểm tra chữ số, nhưng chưa từng được phát hành và không thể hoàn tất một giao dịch thanh toán nào. Chúng chỉ dành cho kiểm thử phần mềm và trình diễn biểu mẫu.
Tiếp theo
Nếu bạn muốn hiểu vì sao chữ số cuối cùng của dãy số lại quan trọng đến vậy, hãy đọc bài về thuật toán Luhn. Còn nếu bạn đang chuẩn bị bộ dữ liệu thử cho nhiều mạng thẻ cùng lúc, bài số thẻ thử nghiệm theo từng mạng sẽ giúp bạn chọn đúng dải số cần phủ.