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. 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. 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. 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. 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. 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 12 → 3
3 4 không 4
4 6 12 → 3
5 3 không 3
6 4 8
7 3 không 3
8 0 0
9 8 không 8
10 8 16 → 7
11 4 không 4
12 1 2
13 9 không 9
14 3 6
15 5 không 5
16 4 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ố
American Express 15 chữ số
IMEI (Mã định danh thiết bị GSM) 15 chữ số
Bảo hiểm Xã hội Canada 9 chữ số
Mã nhận dạng nhà cung cấp quốc gia Hoa Kỳ 10 chữ số
Chứng minh nhân dân Israel (Teudat Zehut) 9 chữ số
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

Công cụ này có phiên bản bằng các ngôn ngữ khác