1585540
Thuật toán Luhn
https://vi.wikipedia.org/wiki?curid=1585540
Title: Thuật toán Luhn
Thuật toán xuất hiện trong United States Patent cho một thiết bị cơ khí cầm tay để tính toán checksum. Do đó, nó được yêu cầu khá đơn giản. Thiết bị lấy mod 10 tổng bằng phương tiện cơ học. Các chữ số thay thế, nghĩa là, kết quả của thủ tục nhân đôi và giảm, không được tạo ra một cách cơ học. Thay vào đó, các chữ số được đánh dấu theo thứ tự hoán vị trên thân máy.
Triển khai giả mã.
 function luhnAlgorithm(cardNumber) {
 const digits = cardNumber.toString().split(").map(Number);
 let sum = 0;
 let isAlternate = false;
 for (let i = digits.length - 1; i &gt;= 0; i--) {
 let digit = digits[i];
 if (isAlternate) {
 digit *= 2;
 if (digit &gt; 9) {
 digit -= 9;
 sum += digit;
 isAlternate = !isAlternate;
 return sum % 10 === 0;
 // Ví dụ sử dụng
 const cardNumber = '4242424242424242';
 const isValid = luhnAlgorithm(cardNumber);
 console.log(`Số thẻ ${cardNumber} có hợp lệ: ${isValid}`);
Nơi sử dụng.
Ngoài số thẻ tín dụng, thuật toán này cũng được sử dụng để tính toán số kiểm tra trên số thẻ SIM.
Ví dụ. Lấy số sê-ri SIM (còn được gọi là ICCID) 89610195012344000018
Số được in trên thẻ SIM thường là một tập hợp con của chuỗi này.
Hai chữ số cuối cùng là chữ số kiểm tra.
checkLuhn("896101950123440000") sẽ trả về 1 - số kiểm đầu tiên
checkLuhn("950123440000") sẽ trả về 8 - số kiểm thứ hai. Số rút ngắn này, theo sau là số kiểm của nó được in trên chính thẻ SIM.