ITF14.js 618 B

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