@ombori/epc-ean
Version:
EPC Tag Data Standard encoding and decoding library, written in javascript
176 lines (152 loc) • 4.61 kB
JavaScript
import Utils from '../utils/utils';
import { Epc } from '../epc';
import { Type } from '../type';
import { Sgtin96 } from './sgtin96';
export class Sgtin198 extends Epc {
constructor(hexEpc) {
super(Sgtin198.TOTAL_BITS);
if (hexEpc) {
super.setFromHexString(hexEpc);
} else {
super.set(Sgtin198.EPC_HEADER, Epc.EPC_HEADER_OFFSET, Epc.EPC_HEADER_END);
}
}
clone() {
return new Sgtin198().setFromBitArray(this);
}
getType() {
return Type.SGTIN198;
}
fromTagURI(uri) {
const value = uri.split(':');
try {
if (value[3] === this.TAG_URI) {
const data = value[4].split('.');
const result = new Sgtin198();
result.setFilter(parseInt(data[0]));
result.setPartition(12 - data[1].length);
result.setCompanyPrefix(parseInt(data[1]));
result.setItemReference(parseInt(data[2]));
result.setSerial(data[3]);
return result;
}
} catch (e) {
// console.log(e)
}
throw new Error(`${uri} is not a known EPC tag URI scheme`);
}
toTagURI() {
// F.C.I.S (Filter, Company, Item, Serial)
let partition = Sgtin96.PARTITIONS[this.getPartition()];
return Sgtin198.TAG_URI_TEMPLATE(
this.getFilter(),
this.getSegmentString(partition.a),
this.getSegmentString(partition.b),
this.getSerial(),
);
}
toIdURI() {
// C.I.S (Company, Item, Serial)
let partition = Sgtin96.PARTITIONS[this.getPartition()];
return Sgtin198.PID_URI_TEMPLATE(
this.getSegmentString(partition.a),
this.getSegmentString(partition.b),
this.getSerial(),
);
}
toBarcode() {
return this.getGtin();
}
getTotalBits() {
return Sgtin198.TOTAL_BITS;
}
getHeader() {
return Sgtin198.EPC_HEADER;
}
getPartition() {
return super.get(Sgtin198.PARTITION_OFFSET, Sgtin198.PARTITION_END);
}
setPartition(value) {
if (value < 0 || value >= Sgtin96.PARTITIONS.length) {
throw new Error(
`Value '${value}' out of range (min: 0, max: ${Sgtin96.PARTITIONS.length - 1})`,
);
}
super.set(value, Sgtin96.PARTITION_OFFSET, Sgtin96.PARTITION_END);
return this;
}
getGtin() {
let partition = Sgtin96.PARTITIONS[this.getPartition()];
let item = super.getSegmentString(partition.b);
let result =
item.substring(0, 1) + super.getSegmentString(partition.a) + item.substring(1);
return result + Utils.computeCheckDigit(result);
}
setGtin(gtin) {
// ean
let partition = Sgtin96.PARTITIONS[this.getPartition()];
super.setSegment(gtin.substring(1, partition.a.digits + 1), partition.a);
super.setSegment(
Number(
gtin.charAt(0) +
gtin.substring(partition.a.digits + 1, partition.a.digits + partition.b.digits),
),
partition.b,
);
return this;
}
getCompanyPrefix() {
return super.getSegment(Sgtin96.PARTITIONS[this.getPartition()].a);
}
setCompanyPrefix(value) {
super.setSegment(value, Sgtin96.PARTITIONS[this.getPartition()].a);
return this;
}
getItemReference() {
return super.getSegment(Sgtin96.PARTITIONS[this.getPartition()].b);
}
setItemReference(value) {
super.setSegment(value, Sgtin96.PARTITIONS[this.getPartition()].b);
return this;
}
getSerial() {
return super.getString(
Sgtin198.SERIAL_OFFSET,
Sgtin198.SERIAL_END,
Sgtin198.CHAR_BITS,
);
}
/**
* All values permitted by GS1 General Specifications (up to 20 alphanumeric characters)
* @param value
*/
setSerial(value) {
if (!value || value.length > Sgtin198.MAX_SERIAL_LEN)
throw new Error(
`Value '${value}' length out of range (max length: ${Sgtin198.MAX_SERIAL_LEN})`,
);
super.setString(
value,
Sgtin198.SERIAL_OFFSET,
Sgtin198.SERIAL_END,
Sgtin198.CHAR_BITS,
);
return this;
}
}
Sgtin198.EPC_HEADER = 0x36;
Sgtin198.TOTAL_BITS = 198;
Sgtin198.PARTITION_OFFSET = 11;
Sgtin198.PARTITION_END = 14;
Sgtin198.SERIAL_OFFSET = 58;
Sgtin198.SERIAL_END = Sgtin198.TOTAL_BITS;
Sgtin198.MAX_SERIAL_LEN = 20;
Sgtin198.CHAR_BITS =
(Sgtin198.SERIAL_END - Sgtin198.SERIAL_OFFSET) / Sgtin198.MAX_SERIAL_LEN; // 7
Sgtin198.TAG_URI = 'sgtin-198';
Sgtin198.TAG_URI_TEMPLATE = (filter, company, item, serial) => {
return `urn:epc:tag:${this.TAG_URI}:${filter}.${company}.${item}.${serial}`;
}; // F.C.I.S (Filter, Company, Item, Serial)
Sgtin198.PID_URI_TEMPLATE = (company, item, serial) => {
return `urn:epc:id:sgtin:${company}.${item}.${serial}`;
}; // C.I.S (Company, Item, Serial)