diff --git a/snippets/luhnCheck.md b/snippets/luhnCheck.md new file mode 100644 index 000000000..cbd3918f7 --- /dev/null +++ b/snippets/luhnCheck.md @@ -0,0 +1,25 @@ +### luhnCheck + +Implementation of the [Luhn Algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers etc. + +Use `String.split('')`, `Array.reverse()` and `Array.map()` in combination with `parseInt()` to obtain an array of digits. +Use `Array.splice(0,1)` to obtain the last digit. +Use `Array.reduce()` to implement the Luhn Algorithm. +Return `true` if `sum` is divisible by `10`, `false` otherwise. + + +``` js +const luhnCheck = num => { + let arr = (num+'').split('').reverse().map(x => parseInt(x)); + let lastDigit = arr.splice(0,1)[0]; + let sum = arr.reduce((acc,val,i) => i%2!==0 ? acc + val : acc + (val * 2) % 9 || 9,0); + sum += lastDigit; + return sum%10 === 0; +} +``` + +```js +luhnCheck("4485275742308327"); // true +luhnCheck(6011329933655299); // true +luhnCheck(123456789); // false +```