Lines of Code | 33 |
Duplicated Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | import ITF from './ITF'; |
||
2 | |||
3 | // Calculate the checksum digit |
||
4 | const checksum = (data) => { |
||
5 | const res = data |
||
6 | .substr(0, 13) |
||
7 | .split('') |
||
8 | .map(num => parseInt(num, 10)) |
||
9 | .reduce((sum, n, idx) => sum + (n * (3 - (idx % 2) * 2)), 0); |
||
10 | |||
11 | return Math.ceil(res / 10) * 10 - res; |
||
12 | }; |
||
13 | |||
14 | class ITF14 extends ITF { |
||
15 | |||
16 | constructor(data, options) { |
||
17 | // Add checksum if it does not exist |
||
18 | if (data.search(/^[0-9]{13}$/) !== -1) { |
||
19 | data += checksum(data); |
||
20 | } |
||
21 | super(data, options); |
||
22 | } |
||
23 | |||
24 | valid() { |
||
25 | return ( |
||
26 | this.data.search(/^[0-9]{14}$/) !== -1 && |
||
27 | +this.data[13] === checksum(this.data) |
||
28 | ); |
||
29 | } |
||
30 | |||
31 | } |
||
32 | |||
33 | export default ITF14; |
||
34 |