Máy Tính Thuật Toán Luhn - Xác Thực Thẻ Tín Dụng & IMEI
Máy tính Luhn mod 10 miễn phí để xác thực thẻ tín dụng, kiểm tra IMEI và xác minh ID. Ngay lập tức xác thực số hoặc tạo dữ liệu thử nghiệm trực tuyến.
Máy tính Thuật toán Luhn
Kiểm tra xem số của bạn có vượt qua xác thực Luhn mod 10 không
Tài liệu hướng dẫn
Hiểu về Thuật toán Luhn
Cần xác minh số thẻ tín dụng hoặc kiểm tra IMEI? Thuật toán Luhn (hay còn gọi là "thuật toán mod 10") là một công thức checksum đã là nền tảng của việc xác minh thanh toán từ năm 1954. Nhà khoa học IBM Hans Peter Luhn đã thiết kế kiểm tra toán học tinh vi này để bắt các lỗi đánh máy và sai sót trong quá trình nhập liệu thủ công—như khi bạn vô tình hoán đổi hai chữ số hoặc nhập sai một số.
Điều khiến nó trở nên vô cùng quan trọng: mọi mạng thẻ tín dụng lớn (Visa, Mastercard, American Express), số IMEI của thiết bị di động, Số Bảo hiểm Xã hội Canada, và mã định danh nhà cung cấp dịch vụ y tế Hoa Kỳ đều dựa vào thuật toán này. Khi bạn nhập số thẻ vào một biểu mẫu thanh toán và nó ngay lập tức từ chối lỗi, đó chính là kiểm tra Luhn đang hoạt động.
Máy tính này cho phép bạn xác thực bất kỳ chuỗi số nào hoặc tạo dữ liệu thử nghiệm đạt được xác minh—điều thiết yếu khi bạn đang xây dựng các tích hợp thanh toán hoặc kiểm tra hệ thống nhận dạng mà không sử dụng dữ liệu khách hàng thực.
Cách Sử Dụng Máy Tính Này
Xác thực các số hiện có: Nhập bất kỳ dãy số nào—như thẻ tín dụng 16 chữ số hoặc IMEI 15 chữ số—và nhấp vào "Xác thực". Bạn sẽ ngay lập tức biết liệu nó có vượt qua kiểm tra mod 10 hay không, cùng với phân tích từng bước về cách mỗi chữ số được xử lý. Điều này đặc biệt hữu ích khi gỡ lỗi các biểu mẫu thanh toán hoặc xác minh việc nhập liệu chính xác.
Tạo dữ liệu thử nghiệm: Chuyển sang chế độ "Tạo" để tạo các số thử nghiệm hợp lệ với bất kỳ độ dài nào. Những số này vượt qua xác minh Luhn nhưng không phải là thẻ thực tế, hoạt động—khiến chúng trở nên hoàn hảo cho môi trường phát triển nơi bạn cần các trường hợp thử nghiệm thực tế mà không chạm vào thông tin thanh toán trực tiếp.
Hiểu quy trình: Hình ảnh trực quan cho thấy chính xác những gì xảy ra với từng chữ số: chữ số nào được nhân đôi, khi nào 9 được trừ đi, và làm thế nào tổng cuối cùng xác định tính hợp lệ. Tôi đã thấy phản hồi trực quan này vô cùng giá trị khi giải thích thuật toán cho các đồng nghiệp hoặc gỡ lỗi việc triển khai.
Cách Hoạt Động của Thuật Toán Luhn
Thuật toán xử lý các số từ phải sang trái, áp dụng một mẫu đơn giản để bắt hầu hết các lỗi nhập liệu:
-
Bắt đầu từ phải: Lấy từng chữ số, di chuyển sang trái. Mỗi chữ số thứ hai được nhân đôi (đây là những chữ số ở vị trí chẵn khi đếm từ phải).
-
Xử lý các số nhân đôi lớn: Khi nhân đôi tạo ra một số lớn hơn 9, hãy trừ đi 9. Về mặt toán học, điều này tương đương với việc cộng các chữ số riêng lẻ (18 trở thành 1+8=9).
-
Tổng tất cả: Cộng tất cả các chữ số đã xử lý—cả những chữ số đã nhân đôi/điều chỉnh và những chữ số không thay đổi.
-
Kiểm tra tính chia hết: Nếu tổng chia hết cho 10 (kết thúc bằng 0), số đó là hợp lệ. Bất kỳ kết quả nào khác đều có nghĩa là có lỗi.
Điều thông minh về phương pháp này là cách nó bắt các lỗi thông thường. Nếu bạn hoán đổi hai chữ số liền kề hoặc nhập sai một số, tổng kiểm tra hầu như luôn thay đổi. Thuật toán sẽ không bắt được mọi lỗi có thể—các lỗi kép như hoán đổi 22 thành 55 sẽ thoát qua—nhưng nó bắt được khoảng 98% lỗi chữ số ngẫu nhiên và khoảng 90% các phép hoán vị liền kề.
Dưới đây là biểu diễn trực quan của quá trình:
Công Thức Toán Học
Đối với những người thích ký hiệu chính thức, dưới đây là biểu thức toán học:
Để là chữ số thứ , đếm từ chữ số bên phải (không bao gồm chữ số kiểm tra) và di chuyển sang trái. Sau đó, chữ số kiểm tra được chọn sao cho:
Trong đó là phép toán modulo.
Ứng Dụng Thực Tế
Xử lý thanh toán: Mọi mạng lưới thẻ chính—Visa, Mastercard, American Express, Discover—đều sử dụng kiểm tra Luhn như một hàng phòng thủ đầu tiên chống lại lỗi đánh máy. Khi bạn xây dựng một biểu mẫu thanh toán, việc triển khai xác thực Luhn ở phía máy khách giúp người dùng tránh được việc gửi các số không chính xác và giảm các lệnh gọi API không cần thiết đến các cổng thanh toán.
Theo dõi thiết bị di động: Các số IMEI trên điện thoại và máy tính bảng bao gồm chữ số kiểm tra Luhn. Điều này trở nên quan trọng trong quản lý chuỗi cung ứng và hệ thống xác thực thiết bị—Tôi đã chứng kiến các hệ thống kho hàng từ chối các lần quét IMEI không hợp lệ ngay lập tức, ngăn chặn các lỗi vận chuyển trước khi chúng xảy ra.
Mã định danh y tế: Hệ thống Mã Nhà Cung Cấp Quốc Gia (NPI) của Hoa Kỳ xác thực các số nhà cung cấp bằng thuật toán này. Với hàng triệu giao dịch y tế hàng ngày, việc bắt kịp các lỗi chép lại trong ID nhà cung cấp ngăn chặn các khoản thanh toán chậm trễ và giảm số lần từ chối yêu cầu.
Nhận dạng chính phủ: Các Số Bảo Hiểm Xã Hội của Canada kết hợp xác thực Luhn. Thuật toán cung cấp một kiểm tra tính hợp lý nhanh chóng mà không yêu cầu tra cứu cơ sở dữ liệu, làm cho nó hiệu quả trong các kịch bản xác minh khối lượng lớn.
Hệ thống sách cũ: Một số triển khai ISBN-10 sử dụng biến thể Luhn. Mặc dù ISBN-13 sử dụng một thuật toán chữ số kiểm tra khác, các hệ thống thư viện và kho hàng cũ vẫn dựa vào xác thực dựa trên Luhn.
Ví dụ từng bước
Xác thực số thẻ tín dụng
Hãy xác thực số 4532015112830366:
- Bắt đầu từ phải: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Nhân đôi mỗi chữ số thứ hai (từ phải): 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Trừ 9 từ các số > 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Tổng: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 % 10 = 0 ✓ Hợp lệ!
Bắt một số IMEI không hợp lệ
Kiểm tra 490154203237518 (chữ số cuối cùng là sai):
- Sau khi nhân đôi và xử lý: Tổng = 57
- 57 % 10 = 7 ✗ Không hợp lệ!
Tổng không kết thúc bằng số 0, vì vậy thuật toán đánh dấu đây là không chính xác. Để làm cho nó hợp lệ, chữ số cuối cùng phải là 1, điều này sẽ đưa tổng lên 60—chia hết cho 10. Đây chính xác là cách thuật toán bắt các lỗi chép lại trong các định danh thiết bị.
Các Thuật Toán Kiểm Tra Checksum Thay Thế
Thuật toán Luhn phổ biến vì dễ triển khai, nhưng có các phương án thay thế tinh vi hơn khi bạn cần phát hiện lỗi mạnh mẽ hơn:
Thuật toán Verhoeff: Phát hiện tất cả các lỗi chữ số đơn và gần như tất cả các lỗi hoán vị, bao gồm các trường hợp chữ số kép mà Luhn bỏ qua (như 22↔55). Sự đánh đổi là độ phức tạp tăng lên - yêu cầu các bảng tra cứu với các phép nhân và hoán vị. Sử dụng thuật toán này khi độ chính xác dữ liệu là quan trọng và chi phí tính toán không phải là vấn đề.
Thuật toán Damm: Phát hiện tất cả các lỗi chữ số đơn và tất cả các hoán vị liền kề không có ngoại lệ. Nó dựa trên một phép toán quasigroup được xây dựng đặc biệt để đảm bảo phạm vi bao phủ hoàn toàn. Việc triển khai sử dụng một bảng tra cứu duy nhất, làm cho nó đơn giản hơn Verhoeff nhưng vẫn phức tạp hơn Luhn.
Chữ số kiểm tra ISBN-13: Sử dụng thuật toán modulo 10 có trọng số khác với cả Luhn và ISBN-10. Các trọng số thay đổi giữa 1 và 3, cung cấp khả năng phát hiện lỗi tốt cho các định danh sách cụ thể. Thuật toán này đã thay thế hệ thống ISBN-10 cũ (sử dụng Luhn) khi ngành công nghiệp cần nhiều không gian định danh hơn.
Lịch Sử và Bối Cảnh
Hans Peter Luhn đã phát triển thuật toán này tại IBM vào năm 1954, trong những ngày đầu của xử lý dữ liệu tự động. Luhn đã được biết đến với công trình tiên phong về tra cứu thông tin—hệ thống lập chỉ mục KWIC (Từ Khóa Trong Ngữ Cảnh) của ông đã ảnh hưởng đến cách chúng ta tìm kiếm tài liệu ngay cả ngày nay—nhưng thuật toán mod 10 đã trở thành đóng góp bền vững nhất của ông.
Đây là sự khác biệt then chốt: Luhn thiết kế điều này cho phát hiện lỗi, không phải bảo mật. Vào những năm 1950, vấn đề là các lỗi thẻ đục lỗ và sai sót trong việc sao chép thủ công, không phải gian lận kỹ thuật số. Thuật toán này bắt được các lỗi đánh máy ngẫu nhiên một cách xuất sắc—nhưng nó không phải là mã hóa. Một số Luhn hợp lệ không có nghĩa là thẻ đang hoạt động, có nguồn quỹ, hoặc thuộc về người sử dụng.
Điều đáng chú ý là một thuật toán 70 năm tuổi vẫn phục vụ mục đích ban đầu của nó một cách tuyệt vời. Các nhà xử lý thanh toán bổ sung nó với các biện pháp bảo mật hiện đại (mã hóa token, xác minh CVV, 3D Secure), nhưng việc kiểm tra Luhn ban đầu ở phía máy khách vẫn ngăn chặn hàng triệu lỗi rõ ràng hàng ngày trước khi chúng lãng phí băng thông cho các lệnh gọi cổng thanh toán.
Ví dụ Triển khai
Dưới đây là cách triển khai xác thực và tạo số Luhn trong Python, JavaScript và Java. Các ví dụ này ưu tiên tính dễ đọc đồng thời vẫn duy trì hiệu quả:
1import random
2
3def luhn_validate(number):
4 digits = [int(d) for d in str(number)]
5 checksum = 0
6 for i in range(len(digits) - 1, -1, -1):
7 d = digits[i]
8 if (len(digits) - i) % 2 == 0:
9 d = d * 2
10 if d > 9:
11 d -= 9
12 checksum += d
13 return checksum % 10 == 0
14
15def generate_valid_number(length):
16 digits = [random.randint(0, 9) for _ in range(length - 1)]
17 checksum = sum(digits[::2]) + sum(sum(divmod(d * 2, 10)) for d in digits[-2::-2])
18 check_digit = (10 - (checksum % 10)) % 10
19 return int(''.join(map(str, digits + [check_digit])))
20
21## Ví dụ sử dụng:
22
23print(luhn_validate(4532015112830366)) # Đúng
24print(luhn_validate(4532015112830367)) # Sai
25print(generate_valid_number(16)) # Tạo số 16 chữ số hợp lệ
261function luhnValidate(number) {
2 const digits = number.toString().split('').map(Number);
3 let checksum = 0;
4 for (let i = digits.length - 1; i >= 0; i--) {
5 let d = digits[i];
6 if ((digits.length - i) % 2 === 0) {
7 d *= 2;
8 if (d > 9) d -= 9;
9 }
10 checksum += d;
11 }
12 return checksum % 10 === 0;
13}
14
15function generateValidNumber(length) {
16 const digits = Array.from({length: length - 1}, () => Math.floor(Math.random() * 10));
17 const checksum = digits.reduce((sum, digit, index) => {
18 if ((length - 1 - index) % 2 === 0) {
19 digit *= 2;
20 if (digit > 9) digit -= 9;
21 }
22 return sum + digit;
23 }, 0);
24 const checkDigit = (10 - (checksum % 10)) % 10;
25 return parseInt(digits.join('') + checkDigit);
26}
27
28// Ví dụ sử dụng:
29console.log(luhnValidate(4532015112830366)); // đúng
30console.log(luhnValidate(4532015112830367)); // sai
31console.log(generateValidNumber(16)); // Tạo số 16 chữ số hợp lệ
321import java.util.Random;
2
3public class LuhnValidator {
4 public static boolean luhnValidate(long number) {
5 String digits = String.valueOf(number);
6 int checksum = 0;
7 boolean isEven = true;
8 for (int i = digits.length() - 1; i >= 0; i--) {
9 int digit = Character.getNumericValue(digits.charAt(i));
10 if (isEven) {
11 digit *= 2;
12 if (digit > 9) digit -= 9;
13 }
14 checksum += digit;
15 isEven = !isEven;
16 }
17 return checksum % 10 == 0;
18 }
19
20 public static long generateValidNumber(int length) {
21 Random random = new Random();
22 long[] digits = new long[length - 1];
23 for (int i = 0; i < length - 1; i++) {
24 digits[i] = random.nextInt(10);
25 }
26 long checksum = 0;
27 for (int i = digits.length - 1; i >= 0; i--) {
28 long digit = digits[i];
29 if ((length - 1 - i) % 2 == 0) {
30 digit *= 2;
31 if (digit > 9) digit -= 9;
32 }
33 checksum += digit;
34 }
35 long checkDigit = (10 - (checksum % 10)) % 10;
36 long result = 0;
37 for (long digit : digits) {
38 result = result * 10 + digit;
39 }
40 return result * 10 + checkDigit;
41 }
42
43 public static void main(String[] args) {
44 System.out.println(luhnValidate(4532015112830366L)); // đúng
45 System.out.println(luhnValidate(4532015112830367L)); // sai
46 System.out.println(generateValidNumber(16)); // Tạo số 16 chữ số hợp lệ
47 }
48}
49Các Trường Hợp Biên và Những Vấn Đề Triển Khai
Khi triển khai xác thực Luhn trong các hệ thống sản xuất, hãy chú ý đến những vấn đề phổ biến sau:
Làm sạch đầu vào: Đầu vào thực tế thường bao gồm khoảng trắng, dấu gạch ngang hoặc các ký tự định dạng khác (như "4532-0151-1128-3036"). Loại bỏ chúng trước khi xác thực thay vì từ chối đầu vào—người dùng thường sao chép các số có định dạng. Tuy nhiên, hãy ngay lập tức từ chối các ký tự chữ cái vì chúng cho thấy đầu vào không hợp lệ.
Các số 0 đầu tiên có ý nghĩa: Một số như "0123456789" khác với "123456789" đối với mục đích Luhn. Các số 0 đầu tiên phải được giữ nguyên trong quá trình xác thực. Điều này làm cho các nhà phát triển bị vấp ngay khi chuyển đổi sang số nguyên đầu tiên—thay vào đó hãy sử dụng các thao tác trên chuỗi.
Giới hạn số nguyên của ngôn ngữ: Thẻ tín dụng thường có tối đa 19 chữ số, phù hợp với số nguyên 64-bit. Nhưng nếu bạn đang xác thực các định danh có độ dài tùy ý, hãy tránh chuyển đổi sang số nguyên. Xử lý dưới dạng chuỗi hoặc mảng các chữ số để ngăn tràn.
Đầu vào trống hoặc null: Xác định rõ ràng hành vi của bạn: ném một ngoại lệ, trả về false, hay xử lý một cách khéo léo? Tôi nhận thấy việc trả về false là hợp lý nhất cho các hàm xác thực, nhưng các điểm cuối API có thể muốn trả về lỗi 400 với một thông báo mô tả.
Hiệu suất quy mô lớn: Để xác thực hàng loạt (như xử lý các tệp CSV được tải lên với hàng ngàn số thẻ), thuật toán cơ bản đã khá nhanh—O(n) với n là số chữ số. Nút cổ chai thường là I/O, không phải tính toán. Tập trung tối ưu hóa việc phân tích tệp và báo cáo lỗi thay vì logic xác thực.
Tham Khảo Nhanh: Các Số Kiểm Tra
Sử dụng những số này để kiểm tra việc triển khai của bạn:
Số hợp lệ:
4532015112830366— Định dạng Visa (16 chữ số)046454286— Định dạng SIN Canada (9 chữ số)79927398713— Số hợp lệ chung
Số không hợp lệ:
4532015112830367— Sai một chữ số490154203237518— Chữ số kiểm tra sai79927398714— Chữ số cuối cùng không chính xác
Các trường hợp kiểm tra này bao gồm các kịch bản phổ biến: các số hợp lệ tiêu chuẩn, lỗi một chữ số, và các chữ số kiểm tra không chính xác.
Bộ Kiểm Thử Tự Động
Dưới đây là bộ kiểm thử toàn diện để xác thực việc triển khai của bạn:
1def test_luhn_algorithm():
2 # Các bài kiểm tra xác thực cơ bản
3 assert luhn_validate(4532015112830366) == True
4 assert luhn_validate(4532015112830367) == False
5 assert luhn_validate(79927398713) == True
6 assert luhn_validate(79927398714) == False
7
8 # Kiểm tra các số được tạo ra thực sự vượt qua xác thực
9 for _ in range(10):
10 generated = generate_valid_number(16)
11 assert luhn_validate(generated) == True, f"Số được tạo {generated} không vượt qua xác thực"
12
13 # Trường hợp biên: một chữ số
14 assert luhn_validate(0) == True # 0 mod 10 = 0
15
16 # Trường hợp biên: các số 0 đứng đầu được giữ nguyên
17 assert luhn_validate("0000000000000000") != luhn_validate(0)
18
19 print("Tất cả các bài kiểm tra đã vượt qua!")
20
21test_luhn_algorithm()
22Câu Hỏi Thường Gặp
Thuật toán Luhn được sử dụng để làm gì?
Thuật toán Luhn xác thực các số nhận dạng bao gồm thẻ tín dụng (Visa, Mastercard, Amex), số IMEI của thiết bị di động, Số Bảo hiểm Xã hội Canada và số NPI chăm sóc sức khỏe của Hoa Kỳ. Nó bắt được các lỗi nhập liệu thông thường—như các chữ số được nhập sai hoặc các số được hoán đổi do vô ý—trước khi chúng gây ra lỗi xử lý hoặc giao dịch thất bại.
Thuật toán Luhn có độ chính xác như thế nào trong việc phát hiện lỗi?
Luhn bắt được khoảng 98% lỗi một chữ số và khoảng 90% lỗi hoán vị liền kề (như nhập "12" thay vì "21"). Tuy nhiên, nó bỏ qua các lỗi kép nơi cả hai chữ số đều giống nhau (22→55) và các hoán vị nhảy (101→404). Đối với hầu hết các ứng dụng thực tế liên quan đến việc nhập liệu thủ công, tỷ lệ phát hiện này là đủ.
Tôi có thể xác thực thẻ tín dụng ngoại tuyến bằng thuật toán Luhn không?
Có, xác thực Luhn hoàn toàn hoạt động ngoại tuyến—đó là thuần túy toán học, không yêu cầu tra cứu cơ sở dữ liệu hoặc gọi API. Điều này làm cho nó trở nên hoàn hảo cho việc xác thực phía máy khách trong các biểu mẫu web, giảm tải cho máy chủ và cung cấp phản hồi tức thì cho người dùng. Nhưng hãy nhớ: một số Luhn hợp lệ không có nghĩa là thẻ đang hoạt động hoặc có sẵn tín dụng.
Thuật toán Luhn có an toàn cho việc xử lý thanh toán không?
Không—Luhn là phát hiện lỗi, không phải bảo mật. Nó chỉ xác minh định dạng toán học. Một lần kiểm tra Luhn thành công không có nghĩa là thẻ là thật, đang hoạt động, được tài trợ, hoặc thuộc về người dùng. Bảo mật thanh toán hiện đại yêu cầu nhiều lớp: xác minh CVV/CVC, xác thực địa chỉ (AVS), xác thực 3D Secure và mã hóa. Luhn chỉ là bước kiểm tra tính hợp lý đầu tiên.
Những ngôn ngữ lập trình nào hỗ trợ việc triển khai Luhn?
Mọi ngôn ngữ mục đích chung đều có thể triển khai Luhn—đó là một thuật toán đơn giản chỉ yêu cầu các phép toán số học và vòng lặp cơ bản. Python, JavaScript, Java, C++, C#, PHP, Ruby, Go, Rust và Swift đều dễ dàng xử lý trong 10-20 dòng mã. Một số ngôn ngữ có thư viện của bên thứ ba, nhưng thuật toán đủ đơn giản để hầu hết các nhà phát triển tự triển khai trực tiếp.
Tại sao nó được gọi là thuật toán mod 10?
Bước cuối cùng kiểm tra xem tổng chữ số có chia hết cho 10 hay không bằng cách sử dụng phép toán modulo (sum % 10 == 0). "Mod 10" đề cập đến việc kiểm tra modulus 10 này. Nếu phần dư bằng không khi chia cho 10, số đó sẽ đạt—ngược lại sẽ không đạt. Tính chất toán học này là điều làm cho thuật toán hoạt động.
Tôi có thể tạo số thẻ tín dụng thử nghiệm bằng Luhn không?
Có—bạn có thể tạo các số vượt qua xác thực Luhn để kiểm tra các biểu mẫu thanh toán trong quá trình phát triển. Đây không phải là các thẻ thật, đang hoạt động; chúng chỉ đáp ứng định dạng toán học. Điều này là hợp pháp và cần thiết để kiểm tra, nhưng việc cố gắng sử dụng các số được tạo ra để mua hàng là gian lận. Hầu hết các cổng thanh toán đều cung cấp số thẻ thử nghiệm chính thức cho môi trường staging.
Các hạn chế của thuật toán Luhn là gì?
Luhn sẽ không bắt được: lỗi kép (22↔55), hoán vị nhảy (101↔404), lỗi phát âm (60↔06 trong một số trường hợp), hoặc nhiều lỗi đồng thời. Nó cũng không cung cấp bảo mật mật mã—định dạng hợp lệ không có nghĩa là thẻ hợp lệ. Mặc dù có những hạn chế này, nhưng tính đơn giản và tỷ lệ phát hiện lỗi trên 90% của nó làm cho nó trở nên thực tế cho các hệ thống thanh toán trong thực tế khi được kết hợp với các phương pháp xác minh khác.
Bắt Đầu Xác Thực Số
Sử dụng máy tính ở trên để xác thực số thẻ tín dụng, tạo dữ liệu thử nghiệm cho môi trường phát triển, hoặc khám phá cách thuật toán mod 10 xử lý từng chữ số. Việc trực quan hóa từng bước giúp gỡ lỗi các vấn đề triển khai và giải thích kết quả xác thực cho những người không có nền tảng kỹ thuật.
Cho dù bạn đang xây dựng một biểu mẫu thanh toán, gỡ lỗi hệ thống xác thực IMEI, hay chỉ đơn giản là muốn tìm hiểu về các thuật toán checksum, công cụ này sẽ cung cấp phản hồi ngay lập tức và tính minh bạch kỹ thuật mà bạn cần.
Tài liệu tham khảo và Đọc thêm
-
Luhn, H. P. (1960). "Máy tính để Xác minh Số". Bằng sáng chế Hoa Kỳ 2,950,048 - Bằng sáng chế gốc mô tả thuật toán.
-
ISO/IEC 7812-1:2017 - Thẻ nhận dạng - Tiêu chuẩn quốc tế về hệ thống đánh số thẻ nhận dạng, quy định việc sử dụng Luhn cho thẻ thanh toán.
-
Gallian, Joseph (1991). "Toán học của Các Số Nhận dạng" - Phân tích học thuật về các thuật toán chữ số kiểm tra bao gồm Luhn, được xuất bản trong Tạp chí Toán học Cao đẳng.
-
Tiêu chuẩn An ninh Dữ liệu Ngành Thẻ Thanh toán (PCI DSS) - Các tiêu chuẩn an ninh quy định cách xử lý dữ liệu thẻ thanh toán, cung cấp bối cảnh về vị trí của Luhn trong ngăn xếp an ninh.