EAN8.js 976 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Encoding documentation:
  2. // http://www.barcodeisland.com/ean8.phtml
  3. import EAN from './EAN';
  4. // Calculate the checksum digit
  5. const checksum = (number) => {
  6. const res = number
  7. .substr(0, 7)
  8. .split('')
  9. .map((n) => +n)
  10. .reduce((sum, a, idx) => (
  11. idx % 2 ? sum + a : sum + a * 3
  12. ), 0);
  13. return (10 - (res % 10)) % 10;
  14. };
  15. class EAN8 extends EAN {
  16. constructor(data, options) {
  17. // Add checksum if it does not exist
  18. if (data.search(/^[0-9]{7}$/) !== -1) {
  19. data += checksum(data);
  20. }
  21. super(data, options);
  22. }
  23. valid() {
  24. return (
  25. this.data.search(/^[0-9]{8}$/) !== -1 &&
  26. +this.data[7] === checksum(this.data)
  27. );
  28. }
  29. leftText() {
  30. return super.leftText(0, 4);
  31. }
  32. leftEncode() {
  33. const data = this.data.substr(0, 4);
  34. return super.leftEncode(data, 'LLLL');
  35. }
  36. rightText() {
  37. return super.rightText(4, 4);
  38. }
  39. rightEncode() {
  40. const data = this.data.substr(4, 4);
  41. return super.rightEncode(data, 'RRRR');
  42. }
  43. }
  44. export default EAN8;