Kết nối qua MCP →

Nhập phép tính

Công thức

Quảng cáo

Kết quả

Kiểm tra Luhn
VALID
Số lượng chữ số 11
Tổng Luhn 70
Tổng mod 10 0
Chữ số kiểm tra (cuối) 3

Thuật toán Luhn là gì?

Thuật toán Luhn, còn được gọi là thuật toán "mod 10", là một công thức kiểm tra (checksum) đơn giản do nhà khoa học Hans Peter Luhn của IBM phát minh năm 1954. Nó được dùng để xác thực các dãy số định danh như số thẻ tín dụng và thẻ ghi nợ, số serial IMEI của điện thoại, cùng nhiều loại mã số định danh quốc gia. Thuật toán này phát hiện được lỗi sai một chữ số và hầu hết các lỗi đảo chỗ chữ số, nhưng nó không phải là biện pháp bảo mật mã hóa — chỉ là một bước kiểm tra tính toàn vẹn dữ liệu cơ bản.

Cách dùng công cụ này

Hãy nhập dãy số bạn muốn kiểm tra vào ô (khoảng trắng và dấu gạch ngang sẽ được tự động bỏ qua). Công cụ sẽ xử lý các chữ số, áp dụng phép kiểm tra Luhn và cho bạn biết dãy số đó HỢP LỆ hay KHÔNG HỢP LỆ, kèm theo tổng cộng dồn, kết quả tổng chia lấy dư cho 10, và chữ số kiểm tra ở cuối.

Giải thích công thức

Đọc các chữ số từ phải sang trái. Giữ nguyên chữ số ngoài cùng bên phải (chữ số kiểm tra), sau đó nhân đôi mỗi chữ số ở vị trí thứ hai. Nếu kết quả nhân đôi lớn hơn 9, hãy trừ đi 9 (tương đương với cộng hai chữ số của nó lại, ví dụ \(8\times2=16 \to 1+6=7\)). Cộng tất cả các giá trị thu được. Nếu tổng chia hết cho 10, dãy số vượt qua phép kiểm tra Luhn.

$$\text{Valid} \iff \left(\sum_{i=0}^{n-1} f(d_i)\right) \bmod 10 = 0 \\[1.5em] \text{where}\quad \left\{ \begin{aligned} d_i &= i\text{-th digit of } \text{Number} \text{ (from right)} \\ f(d_i) &= \begin{cases} d_i & i \text{ even} \\ 2d_i - 9\,[2d_i>9] & i \text{ odd} \end{cases} \end{aligned} \right.$$
Sơ đồ phẳng minh họa việc nhân đôi chữ số của thuật toán Luhn từ phải sang, với các chữ số xen kẽ được nhân đôi và cộng lại
Thuật toán Luhn nhân đôi mỗi chữ số thứ hai tính từ phải sang, rồi cộng tất cả các chữ số.

Ví dụ minh họa

Lấy dãy số 79927398713. Nhân đôi mỗi chữ số ở vị trí thứ hai tính từ phải sang và rút gọn các giá trị lớn hơn 9, ta được các chữ số đã điều chỉnh có tổng là 70. Vì \(70 \bmod 10 = 0\), nên dãy số này hợp lệ.

Lưu đồ phẳng minh họa quá trình kiểm tra Luhn kết thúc bằng phép kiểm tra mod 10, rẽ nhánh thành hợp lệ hoặc không hợp lệ
Nếu tổng chia hết cho 10 thì số đó hợp lệ.

Câu hỏi thường gặp

Kết quả Luhn hợp lệ có nghĩa là thẻ có thật không? Không. Nó chỉ xác nhận dãy số có cấu trúc đúng chuẩn; nó không kiểm tra xem tài khoản có tồn tại hay có tiền trong đó hay không.

Được phép nhập những ký tự nào? Chỉ các chữ số mới được sử dụng; khoảng trắng, dấu gạch ngang và các ký hiệu khác sẽ bị loại bỏ trước khi tính toán.

Tại sao phải trừ 9 khi nhân đôi? Trừ 9 khỏi một chữ số đã nhân đôi mà lớn hơn 9 sẽ cho kết quả giống hệt như khi cộng hai chữ số của nó lại, và đó chính xác là điều mà quy tắc Luhn gốc yêu cầu.

Cập nhật lần cuối: