Created
August 23, 2015 20:32
-
-
Save fskinner/f1fa5894b4295f5ddd56 to your computer and use it in GitHub Desktop.
rfid
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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