Trình kiểm tra thuật toán Luhn
Luhn chỉ xác thực chữ số kiểm tra, không xác nhận thẻ còn hoạt động.
Thuật toán Luhn (ISO/IEC 7812-1) là một giá trị kiểm tra dùng để bảo vệ các số thẻ tín dụng, mã định danh thiết bị IMEI, mã SIN của Canada, mã NPI của Mỹ và một số hệ thống đánh số khác khỏi các lỗi nhập chữ chỉ gồm một chữ số. Bạn chỉ cần dán một chuỗi các chữ số (các khoảng trắng và dấu gạch được bỏ qua), công cụ kiểm tra sẽ tự động xác định số liệu có hợp lệ hay không và thực hiện các bước nhân đôi và cộng tổng để bạn có thể kiểm tra thủ công nếu muốn.
Cách tính toán kiểm tra Luhn
-
1
Loại chuỗi không chứa chữ số
Các khoảng trắng, dấu gạch nối và chấm sẽ bị loại bỏ. Chỉ các chữ số từ 0 đến 9 được tính.
-
2
Nhân đôi mỗi chữ số thứ hai kể từ phải
Bắt đầu từ chữ số thứ hai từ cuối, mỗi chữ số lẻ sẽ được nhân đôi.
-
3
Tổng các chữ số của mỗi giá trị đã được nhân đôi.
Nếu kết quả nhân đôi là 14, thì cộng thêm 1 + 4 = 5. Điều này tương đương với việc trừ đi 9 từ bất kỳ giá trị gấp đôi nào lớn hơn hoặc bằng 10.
-
4
Tổng tất cả các giá trị thu được
Cộng các chữ số đã được nhân đôi và giảm, cùng với các chữ số không thay đổi.
-
5
Kiểm tra tính chia hết cho 10
Nếu tổng kết thúc bằng 0 thì số đó hợp lệ; nếu không thì không hợp lệ.
Ví dụ minh họa
Kiểm tra 4539 1488 0343 6467:
| Vị trí (từ phải sang trái) | Chữ số | Đã nhân đôi chưa? | Giá trị |
|---|---|---|---|
| 1 | 7 | không | 7 |
| 2 | 6 | có | 12 → 3 |
| 3 | 4 | không | 4 |
| 4 | 6 | có | 12 → 3 |
| 5 | 3 | không | 3 |
| 6 | 4 | có | 8 |
| 7 | 3 | không | 3 |
| 8 | 0 | có | 0 |
| 9 | 8 | không | 8 |
| 10 | 8 | có | 16 → 7 |
| 11 | 4 | không | 4 |
| 12 | 1 | có | 2 |
| 13 | 9 | không | 9 |
| 14 | 3 | có | 6 |
| 15 | 5 | không | 5 |
| 16 | 4 | có | 8 |
Tổng cộng: 80. 80 ÷ 10 = 0 → đúng.
Nơi mà Luhn được sử dụng
| Hệ thống | Chiều dài | Có được bảo vệ theo quy định của Luhn không? |
|---|---|---|
| Visa, Mastercard, Discover | 13–19 chữ số | có |
| American Express | 15 chữ số | có |
| IMEI (Mã định danh thiết bị GSM) | 15 chữ số | có |
| Bảo hiểm Xã hội Canada | 9 chữ số | có |
| Mã nhận dạng nhà cung cấp quốc gia Hoa Kỳ | 10 chữ số | có |
| Chứng minh nhân dân Israel (Teudat Zehut) | 9 chữ số | có |
| ISBN-13 | 13 chữ số | không (sử dụng phép chia modulo 10 với hệ số trọng số là 1 và 3) |
Những gì Luhn phát hiện được và những điều nó bỏ sót
- Phát hiện: tất cả các lỗi một chữ số và hầu hết (nhưng không phải toàn bộ) các trường hợp hoán vị giữa các chữ số liền kề.
- Bỏ sót: phép hoán vị 09 ↔ 90 và một số cặp tương tự khác. Đây là kiểm tra lỗi đánh máy, chứ không phải kiểm tra bảo mật.
- Không phải là tính năng bảo mật. Một số hợp lệ theo chuẩn Luhn rất dễ tạo ra. Việc xác thực mã PAN tại các cổng thanh toán sử dụng phạm vi mã của tổ chức phát hành, mã CVV, AVS và công nghệ 3-D Secure, chứ không chỉ riêng Luhn.
Câu hỏi thường gặp
Không. Luhn chỉ kiểm tra xem số hiệu có cấu trúc hợp lệ về mặt toán học hay không; nó không cung cấp bất kỳ thông tin nào về việc thẻ đã được phát hành, có dư tiền hay bị đánh cắp. Việc xác thực thực sự diễn ra tại bên phát hành khi thực hiện quá trình ủy quyền.
Đúng vậy – chữ số cuối cùng chính là chữ số kiểm tra, và có thể được chọn sao cho tổng giá trị chia đều cho 10. Đó là cách các bộ tạo mã IMEI và các mã thẻ thử nghiệm hoạt động.
Phương pháp này có thể phát hiện mọi trường hợp thay thế chữ số đơn và hầu hết các trường hợp hoán vị giữa các chữ số liền kề; tuy nhiên, một số cặp chữ số nhất định (ví dụ như 09 ↔ 90) vẫn không làm thay đổi giá trị tổng kiểm tra. Các phương pháp mạnh mẽ hơn (như ISBN-13, Verhoeff, Damm) lại đánh đổi độ phức tạp để tăng khả năng phát hiện lỗi.
Chương trình kiểm tra hoạt động hoàn toàn trong trình duyệt của bạn, do đó không có dữ liệu nào được truyền đi; tuy nhiên, việc dán trực tiếp số thẻ ngân hàng vào bất kỳ nơi nào đều là thói quen xấu. Khi thử nghiệm, hãy sử dụng các số mẫu (ví dụ: 4242 4242 4242 4242).
Luhn có thể hoạt động với mọi độ dài, nhưng được chuẩn hóa cho các quy cách cụ thể (thường là từ 9 đến 19 chữ số). Công cụ kiểm tra này không đặt giới hạn về độ dài.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Trình định dạng HTML
Định dạng HTML cục bộ trong trình duyệt với thụt lề hai hoặc bốn khoảng trắng. HTML không được tải lên hoặc xác thực.
Bảng tra cứu nhanh Markdown
Tài liệu Markdown thực dụng với bản xem trước thực tế và ví dụ có thể sao chép cho tiêu đề, danh sách, bảng, mã, liên kết, hình ảnh và cú pháp GFM.
Bảng Tra Regex
Tài liệu tham chiếu biểu thức chính quy có thể tìm kiếm cho JavaScript, PCRE2/PHP, Python re và .NET. So sánh mã thông báo, cú pháp riêng của máy, neo, nhóm, lookaround và cờ.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Luhn-algoritmens kontrollverktyg [SV]
- أداة فحص خوارزمية Luhn [AR]
- เครื่องตรวจสอบอัลกอริทึมของ Luhn [TH]
- Luhn-Algorithmus-Prüfer [DE]
- Verificador del Algoritmo de Luhn [ES]
- Vérificateur d'algorithme de Luhn [FR]
- Pemeriksa Algoritma Luhn [ID]
- Luhn 알고리즘 검사기 [KO]
- Luhn-algoritme-checker [NL]
- Walidator algorytmu Luhna [PL]
- Luhnアルゴリズムチェッカー [JA]
- Validador do Algoritmo de Luhn [PT]
- Luhn Algorithm Checker [EN]
- Controllore dell'Algoritmo di Luhn [IT]
- Проверка по алгоритму Луна [RU]
- Luhn Algoritma Kontrolcüsü [TR]
- Luhn 算法校验工具 [ZH]