From 28cca74755da3413722663948ceef33902e983e2 Mon Sep 17 00:00:00 2001 From: Lauren Liberda Date: Fri, 23 Jul 2021 18:31:11 +0200 Subject: [PATCH] ean13: fix edge case on checksum calculating --- src/items/ean/ean.service.ts | 2 +- src/items/ean/ean.spec.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/items/ean/ean.service.ts b/src/items/ean/ean.service.ts index 6ad46ee..e0600e9 100644 --- a/src/items/ean/ean.service.ts +++ b/src/items/ean/ean.service.ts @@ -11,7 +11,7 @@ export class EANService { .map((d) => parseInt(d, 10)) .map((d, i) => d * (i % 2 === 0 ? 1 : 3)) .reduce((s, d) => s + d, 0); - while (sum >= 10) { + while (sum > 10) { sum -= 10; } return 10 - sum; diff --git a/src/items/ean/ean.spec.ts b/src/items/ean/ean.spec.ts index 78b25fa..e7b699e 100644 --- a/src/items/ean/ean.spec.ts +++ b/src/items/ean/ean.spec.ts @@ -6,4 +6,13 @@ describe('EANService', () => { const sum = eans.calcChecksum('400638133393'); expect(sum).toBe(1); }); + + test('always returns num of correct length', () => { + const initial = 140000000000n; + for (let i = 0; i < 100; i += 1) { + const ean = eans.fromID((initial + BigInt(i)).toString(10)); + if (ean.length !== 13) console.log(ean); + expect(ean.length).toBe(13); + } + }); });