cdigit
Advanced tools
Comparing version 1.0.0 to 1.1.0
@@ -8,1 +8,7 @@ const cdigit = require('cdigit'); | ||
console.log(cdigit.luhn.validate('12345')); // false | ||
// Generate and validate check digits using Verhoeff algorithm | ||
console.log(cdigit.verhoeff.generate('1234')); // '0' | ||
console.log(cdigit.verhoeff.encode('1234')); // '12340' | ||
console.log(cdigit.verhoeff.validate('12340')); // true | ||
console.log(cdigit.verhoeff.validate('12345')); // false |
export { default as luhn } from './algo/luhn'; | ||
export { default as verhoeff } from './algo/verhoeff'; |
@@ -5,1 +5,3 @@ "use strict"; | ||
exports.luhn = luhn_1.default; | ||
var verhoeff_1 = require("./algo/verhoeff"); | ||
exports.verhoeff = verhoeff_1.default; |
{ | ||
"name": "cdigit", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "Generate and validate check digits", | ||
@@ -19,5 +19,7 @@ "main": "lib/index.js", | ||
"check digit", | ||
"luhn algorithm", | ||
"algorithm", | ||
"luhn", | ||
"modulus 10", | ||
"mod 10" | ||
"mod 10", | ||
"verhoeff" | ||
], | ||
@@ -24,0 +26,0 @@ "author": "LiosK <contact@mail.liosk.net>", |
@@ -15,2 +15,8 @@ # cdigit | ||
console.log(cdigit.luhn.validate('12345')); // false | ||
// Generate and validate check digits using Verhoeff algorithm | ||
console.log(cdigit.verhoeff.generate('1234')); // '0' | ||
console.log(cdigit.verhoeff.encode('1234')); // '12340' | ||
console.log(cdigit.verhoeff.validate('12340')); // true | ||
console.log(cdigit.verhoeff.validate('12345')); // false | ||
``` |
export { default as luhn } from './algo/luhn'; | ||
export { default as verhoeff } from './algo/verhoeff'; |
@@ -5,3 +5,4 @@ const assert = require('assert').strict; | ||
describe('Luhn algorithm', () => { | ||
const luhn = cdigit.luhn; | ||
const name = 'luhn'; | ||
const algo = cdigit[name]; | ||
@@ -29,6 +30,6 @@ const valid = [ | ||
describe('luhn.generate()', () => { | ||
describe(name + '.generate()', () => { | ||
it('generates a correct check digit', () => { | ||
for (const [num, checkdigit] of valid) { | ||
assert.equal(luhn.generate(num), checkdigit, `luhn.generate(${num})`); | ||
assert.equal(algo.generate(num), checkdigit, `${name}.generate(${num})`); | ||
} | ||
@@ -40,3 +41,3 @@ }); | ||
num = '0000' + num; | ||
assert.equal(luhn.generate(num), checkdigit, `luhn.generate(${num})`); | ||
assert.equal(algo.generate(num), checkdigit, `${name}.generate(${num})`); | ||
} | ||
@@ -47,3 +48,3 @@ }); | ||
for (const [num, checkdigit] of valid) { | ||
assert.equal(luhn.generate(Number(num)), checkdigit, `luhn.generate(${num})`); | ||
assert.equal(algo.generate(Number(num)), checkdigit, `${name}.generate(${num})`); | ||
} | ||
@@ -53,3 +54,3 @@ }); | ||
for (const [num, checkdigit] of large) { | ||
assert.equal(luhn.generate(num), checkdigit, `luhn.generate(${num})`); | ||
assert.equal(algo.generate(num), checkdigit, `${name}.generate(${num})`); | ||
} | ||
@@ -59,7 +60,7 @@ }); | ||
describe('luhn.validate()', () => { | ||
describe(name + '.validate()', () => { | ||
it('returns true if a code or a pair of number and check digit is valid', () => { | ||
for (const [num, checkdigit] of valid) { | ||
assert.ok(luhn.validate(num + checkdigit), `luhn.validate(${num + checkdigit})`); | ||
assert.ok(luhn.validate(num, checkdigit), `luhn.validate(${num}, ${checkdigit})`); | ||
assert.ok(algo.validate(num + checkdigit), `${name}.validate(${num + checkdigit})`); | ||
assert.ok(algo.validate(num, checkdigit), `${name}.validate(${num}, ${checkdigit})`); | ||
} | ||
@@ -69,4 +70,4 @@ }); | ||
for (const [num, checkdigit] of invalid) { | ||
assert.ok(!luhn.validate(num + checkdigit), `!luhn.validate(${num + checkdigit})`); | ||
assert.ok(!luhn.validate(num, checkdigit), `!luhn.validate(${num}, ${checkdigit})`); | ||
assert.ok(!algo.validate(num + checkdigit), `!${name}.validate(${num + checkdigit})`); | ||
assert.ok(!algo.validate(num, checkdigit), `!${name}.validate(${num}, ${checkdigit})`); | ||
} | ||
@@ -78,4 +79,4 @@ }); | ||
num = '0000' + num; | ||
assert.ok(luhn.validate(num + checkdigit), `luhn.validate(${num + checkdigit})`); | ||
assert.ok(luhn.validate(num, checkdigit), `luhn.validate(${num}, ${checkdigit})`); | ||
assert.ok(algo.validate(num + checkdigit), `${name}.validate(${num + checkdigit})`); | ||
assert.ok(algo.validate(num, checkdigit), `${name}.validate(${num}, ${checkdigit})`); | ||
} | ||
@@ -86,4 +87,4 @@ }); | ||
for (const [num, checkdigit] of valid) { | ||
assert.ok(luhn.validate(Number(num + checkdigit)), `luhn.validate(${num + checkdigit})`); | ||
assert.ok(luhn.validate(Number(num), checkdigit), `luhn.validate(${num}, ${checkdigit})`); | ||
assert.ok(algo.validate(Number(num + checkdigit)), `${name}.validate(${num + checkdigit})`); | ||
assert.ok(algo.validate(Number(num), checkdigit), `${name}.validate(${num}, ${checkdigit})`); | ||
} | ||
@@ -93,4 +94,4 @@ }); | ||
for (const [num, checkdigit] of large) { | ||
assert.ok(luhn.validate(num + checkdigit), `luhn.validate(${num + checkdigit})`); | ||
assert.ok(luhn.validate(num, checkdigit), `luhn.validate(${num}, ${checkdigit})`); | ||
assert.ok(algo.validate(num + checkdigit), `${name}.validate(${num + checkdigit})`); | ||
assert.ok(algo.validate(num, checkdigit), `${name}.validate(${num}, ${checkdigit})`); | ||
} | ||
@@ -100,6 +101,6 @@ }); | ||
describe('luhn.encode()', () => { | ||
describe(name + '.encode()', () => { | ||
it('appends a correct check digit to a number', () => { | ||
for (const [num, checkdigit] of valid) { | ||
assert.equal(luhn.encode(num), num + checkdigit, `luhn.encode(${num})`); | ||
assert.equal(algo.encode(num), num + checkdigit, `${name}.encode(${num})`); | ||
} | ||
@@ -111,3 +112,3 @@ }); | ||
num = '0000' + num; | ||
assert.equal(luhn.encode(num), num + checkdigit, `luhn.encode(${num})`); | ||
assert.equal(algo.encode(num), num + checkdigit, `${name}.encode(${num})`); | ||
} | ||
@@ -118,3 +119,3 @@ }); | ||
for (const [num, checkdigit] of valid) { | ||
assert.equal(luhn.encode(Number(num)), num + checkdigit, `luhn.encode(${num})`); | ||
assert.equal(algo.encode(Number(num)), num + checkdigit, `${name}.encode(${num})`); | ||
} | ||
@@ -124,3 +125,3 @@ }); | ||
for (const [num, checkdigit] of large) { | ||
assert.equal(luhn.encode(num), num + checkdigit, `luhn.encode(${num})`); | ||
assert.equal(algo.encode(num), num + checkdigit, `${name}.encode(${num})`); | ||
} | ||
@@ -130,6 +131,6 @@ }); | ||
describe('luhn.decode()', () => { | ||
describe(name + '.decode()', () => { | ||
it('separates the leading digits and the last digit', () => { | ||
for (const [num, checkdigit] of valid) { | ||
assert.deepEqual(luhn.decode(num + checkdigit), [num, checkdigit], `luhn.decode(${num + checkdigit})`); | ||
assert.deepEqual(algo.decode(num + checkdigit), [num, checkdigit], `${name}.decode(${num + checkdigit})`); | ||
} | ||
@@ -139,3 +140,3 @@ }); | ||
for (const [num, checkdigit] of valid) { | ||
assert.deepEqual(luhn.decode(Number(num + checkdigit)), [num, checkdigit], `luhn.decode(${num + checkdigit})`); | ||
assert.deepEqual(algo.decode(Number(num + checkdigit)), [num, checkdigit], `${name}.decode(${num + checkdigit})`); | ||
} | ||
@@ -145,3 +146,3 @@ }); | ||
for (const [num, checkdigit] of large) { | ||
assert.deepEqual(luhn.decode(num + checkdigit), [num, checkdigit], `luhn.decode(${num + checkdigit})`); | ||
assert.deepEqual(algo.decode(num + checkdigit), [num, checkdigit], `${name}.decode(${num + checkdigit})`); | ||
} | ||
@@ -151,3 +152,3 @@ }); | ||
describe('bulk example tests', () => { | ||
describe('bulk example test', () => { | ||
const examples = [ | ||
@@ -195,7 +196,7 @@ '79927398713', | ||
const [num, checkdigit] = [e.slice(0, -1), e.slice(-1)]; | ||
assert.equal(luhn.generate(num), checkdigit, `luhn.generate(${num})`); | ||
assert.ok(luhn.validate(e), `luhn.validate(${e})`); | ||
assert.ok(luhn.validate(num, checkdigit), `luhn.validate(${num}, ${checkdigit})`); | ||
assert.equal(luhn.encode(num), e, `luhn.encode(${num})`); | ||
assert.deepEqual(luhn.decode(e), [num, checkdigit], `luhn.decode(${e})`); | ||
assert.equal(algo.generate(num), checkdigit, `${name}.generate(${num})`); | ||
assert.ok(algo.validate(e), `${name}.validate(${e})`); | ||
assert.ok(algo.validate(num, checkdigit), `${name}.validate(${num}, ${checkdigit})`); | ||
assert.equal(algo.encode(num), e, `${name}.encode(${num})`); | ||
assert.deepEqual(algo.decode(e), [num, checkdigit], `${name}.decode(${e})`); | ||
} | ||
@@ -202,0 +203,0 @@ }); |
34659
19
535
22