Skip to content

Instantly share code, notes, and snippets.

@fskinner
Created August 23, 2015 20:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fskinner/f1fa5894b4295f5ddd56 to your computer and use it in GitHub Desktop.
Save fskinner/f1fa5894b4295f5ddd56 to your computer and use it in GitHub Desktop.
rfid
'use strict';
var bigInt = require("big-integer");
var self = {
epc: undefined,
base: undefined,
parse: function(val) {
for (var p in self.parts)
if (self.parts.hasOwnProperty(p))
self.parts[p] = undefined;
self.epc = val;
},
getUri: function(val) {
if (!val)
val = self.epc;
},
getLength: function(val) {
if (val)
return val.length * 4;
else
return 0;
},
parts: {
Header: undefined,
Filter: undefined,
Partition: undefined,
CompanyPrefix: undefined,
ItemReference: undefined,
SerialNumber: undefined,
SerialReference: undefined,
LocationReference: undefined,
Extension: undefined,
AssetType: undefined,
IndividualAssetReference: undefined,
ServiceReference: undefined,
DocumentType: undefined,
ManagerNumber: undefined,
ObjectClass: undefined,
CAGEOrDODAAC: undefined
},
bitsHelper: function(val, len, valbase) {
var self = this;
self.val = val;
self.bitlength = len;
if (!valbase)
valbase = 16;
self.bits = bigInt(val, valbase).toString(2);
self.bits = Array(len - self.bits.length + 1).join('0') + self.bits;
}
};
self.base = self;
module.exports = self;
'use strict';
var TAG = 'parser.sgtin';
var header = '00110000';
var partition = {
bits: {
company: [40, 37, 34, 30, 27, 24, 20],
reference: [4, 7, 10, 14, 17, 20, 24]
},
digits: {
company: [12, 11, 10, 9, 8, 7, 6],
reference: [1, 2, 3, 4, 5, 6, 7]
}
};
var Abstract = require('./abstract');
var self = Object.create(Abstract, {
parse: {
value: function(val) {
try {
self.base.parse(val);
var bh = new self.base.bitsHelper(val, 96);
if (bh.bits.slice(0, 8) !== header)
throw new Error(val + ' is not a valid SGTIN.');
self.parts.Header = bh.bits.slice(0, 8);
self.parts.Filter = parseInt(bh.bits.slice(8, 11), 2);
self.parts.Partition = parseInt(bh.bits.slice(11, 14), 2);
var companyPrefixEnd = 14 + partition.bits.company[self.parts.Partition];
var company = parseInt(bh.bits.slice(14, companyPrefixEnd), 2).toString();
company = Array(partition.digits.company[self.parts.Partition] - company.length + 1).join('0') + company;
self.parts.CompanyPrefix = company;
var item = parseInt(bh.bits.slice(companyPrefixEnd, companyPrefixEnd + partition.bits.reference[self.parts.Partition]), 2).toString();
item = Array(partition.digits.reference[self.parts.Partition] - item.length + 1).join('0') + item;
self.parts.ItemReference = item;
self.parts.SerialNumber = parseInt(bh.bits.slice(58), 2);
return self;
} catch (e) {
console.error('FUUUUUU', e);
}
}
}
});
module.exports = self;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment