12345678910111213141516171819202122232425 |
- export function valid(digitString: string): boolean {
- digitString = digitString.replace(/ /g, '');
- if (digitString.length < 2) {
- return false;
- }
- if (digitString.match(/\D/)) {
- return false;
- }
- const len = digitString.length;
- const zero = 0x30; // ASCII '0'
- let sum = 0;
- for (let i = len - 1; i >= 0; i--) {
- // We know digit is in [0,9] because we filtered against \D above.
- let digit = (digitString.codePointAt(i) ?? zero) - zero
- if ((len - i) % 2 == 0) {
- digit *= 2;
- if (digit > 9) {
- digit -= 9;
- }
- }
- sum += digit;
- sum %= 10;
- }
- return sum % 10 === 0;
- }
|