forked from FOSS/BangleApps
41 lines
760 B
JavaScript
41 lines
760 B
JavaScript
// Encoding documentation:
|
|
// https://en.wikipedia.org/wiki/EAN_5#Encoding
|
|
|
|
const constants = require("cards.constants.js");
|
|
const encode = require("cards.encode.js");
|
|
const Barcode = require("cards.Barcode.js");
|
|
|
|
const checksum = (data) => {
|
|
const result = data
|
|
.split('')
|
|
.map(n => +n)
|
|
.reduce((sum, a, idx) => {
|
|
return idx % 2
|
|
? sum + a * 9
|
|
: sum + a * 3;
|
|
}, 0);
|
|
return result % 10;
|
|
};
|
|
|
|
class EAN5 extends Barcode {
|
|
|
|
constructor(data, options) {
|
|
super(data, options);
|
|
}
|
|
|
|
valid() {
|
|
return this.data.search(/^[0-9]{5}$/) !== -1;
|
|
}
|
|
|
|
encode() {
|
|
const structure = constants.EAN5_STRUCTURE[checksum(this.data)];
|
|
return {
|
|
data: '1011' + encode(this.data, structure, '01'),
|
|
text: this.text
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = EAN5;
|