/** * luhn.js * */ import {terminal} from "./dfhi.js"; const checkLuhnNumber = (n) => { let sumEvent = 0n; let sumOdd = 0n; while(n > 0) { sumOdd += (n % 10n); // modulo division base 10 to get the last digit n = n/10n; // integer division base 10 to shift credit number one digit to right let rest = n % 10n; // get the second-last digit let p = rest*2n; sumEvent += (p > 9n) ? (p - 9n) : p; n = n/10n; } return (sumEvent + sumOdd) % 10n; } window.main = (...argv) => { try { let credit = argv[0]; let n = BigInt(credit.replace(/[-_\s+]/g, '')); const sum = checkLuhnNumber(n); if (sum === 0n) { terminal.printl(`${credit} may be a valid credit number`); } else { terminal.printl(`${credit} is not a valid credit number`); } }catch (e) { terminal.printl("Die eingegebene Zeichenkette ist keine Credit Nummer"); terminal.printl("Erlaubten Zeichen sind Ziffer, Leerzeichen und Bindenstrich"); } };