@zxing/library
Version:
TypeScript port of ZXing multi-format 1D/2D barcode image processing library.
221 lines • 7.57 kB
JavaScript
import NotFoundException from '../../../../NotFoundException';
export default class FieldParser {
constructor() {
}
static parseFieldsInGeneralPurpose(rawInformation) {
if (!rawInformation) {
return null;
}
// Processing 2-digit AIs
if (rawInformation.length < 2) {
throw new NotFoundException();
}
let firstTwoDigits = rawInformation.substring(0, 2);
for (let dataLength of FieldParser.TWO_DIGIT_DATA_LENGTH) {
if (dataLength[0] === firstTwoDigits) {
if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {
return FieldParser.processVariableAI(2, dataLength[2], rawInformation);
}
return FieldParser.processFixedAI(2, dataLength[1], rawInformation);
}
}
if (rawInformation.length < 3) {
throw new NotFoundException();
}
let firstThreeDigits = rawInformation.substring(0, 3);
for (let dataLength of FieldParser.THREE_DIGIT_DATA_LENGTH) {
if (dataLength[0] === firstThreeDigits) {
if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {
return FieldParser.processVariableAI(3, dataLength[2], rawInformation);
}
return FieldParser.processFixedAI(3, dataLength[1], rawInformation);
}
}
for (let dataLength of FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH) {
if (dataLength[0] === firstThreeDigits) {
if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {
return FieldParser.processVariableAI(4, dataLength[2], rawInformation);
}
return FieldParser.processFixedAI(4, dataLength[1], rawInformation);
}
}
if (rawInformation.length < 4) {
throw new NotFoundException();
}
let firstFourDigits = rawInformation.substring(0, 4);
for (let dataLength of FieldParser.FOUR_DIGIT_DATA_LENGTH) {
if (dataLength[0] === firstFourDigits) {
if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {
return FieldParser.processVariableAI(4, dataLength[2], rawInformation);
}
return FieldParser.processFixedAI(4, dataLength[1], rawInformation);
}
}
throw new NotFoundException();
}
static processFixedAI(aiSize, fieldSize, rawInformation) {
if (rawInformation.length < aiSize) {
throw new NotFoundException();
}
let ai = rawInformation.substring(0, aiSize);
if (rawInformation.length < aiSize + fieldSize) {
throw new NotFoundException();
}
let field = rawInformation.substring(aiSize, aiSize + fieldSize);
let remaining = rawInformation.substring(aiSize + fieldSize);
let result = '(' + ai + ')' + field;
let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);
return parsedAI == null ? result : result + parsedAI;
}
static processVariableAI(aiSize, variableFieldSize, rawInformation) {
let ai = rawInformation.substring(0, aiSize);
let maxSize;
if (rawInformation.length < aiSize + variableFieldSize) {
maxSize = rawInformation.length;
}
else {
maxSize = aiSize + variableFieldSize;
}
let field = rawInformation.substring(aiSize, maxSize);
let remaining = rawInformation.substring(maxSize);
let result = '(' + ai + ')' + field;
let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);
return parsedAI == null ? result : result + parsedAI;
}
}
FieldParser.VARIABLE_LENGTH = [];
FieldParser.TWO_DIGIT_DATA_LENGTH = [
["00", 18],
["01", 14],
["02", 14],
["10", FieldParser.VARIABLE_LENGTH, 20],
["11", 6],
["12", 6],
["13", 6],
["15", 6],
["17", 6],
["20", 2],
["21", FieldParser.VARIABLE_LENGTH, 20],
["22", FieldParser.VARIABLE_LENGTH, 29],
["30", FieldParser.VARIABLE_LENGTH, 8],
["37", FieldParser.VARIABLE_LENGTH, 8],
//internal company codes
["90", FieldParser.VARIABLE_LENGTH, 30],
["91", FieldParser.VARIABLE_LENGTH, 30],
["92", FieldParser.VARIABLE_LENGTH, 30],
["93", FieldParser.VARIABLE_LENGTH, 30],
["94", FieldParser.VARIABLE_LENGTH, 30],
["95", FieldParser.VARIABLE_LENGTH, 30],
["96", FieldParser.VARIABLE_LENGTH, 30],
["97", FieldParser.VARIABLE_LENGTH, 3],
["98", FieldParser.VARIABLE_LENGTH, 30],
["99", FieldParser.VARIABLE_LENGTH, 30],
];
FieldParser.THREE_DIGIT_DATA_LENGTH = [
// Same format as above
["240", FieldParser.VARIABLE_LENGTH, 30],
["241", FieldParser.VARIABLE_LENGTH, 30],
["242", FieldParser.VARIABLE_LENGTH, 6],
["250", FieldParser.VARIABLE_LENGTH, 30],
["251", FieldParser.VARIABLE_LENGTH, 30],
["253", FieldParser.VARIABLE_LENGTH, 17],
["254", FieldParser.VARIABLE_LENGTH, 20],
["400", FieldParser.VARIABLE_LENGTH, 30],
["401", FieldParser.VARIABLE_LENGTH, 30],
["402", 17],
["403", FieldParser.VARIABLE_LENGTH, 30],
["410", 13],
["411", 13],
["412", 13],
["413", 13],
["414", 13],
["420", FieldParser.VARIABLE_LENGTH, 20],
["421", FieldParser.VARIABLE_LENGTH, 15],
["422", 3],
["423", FieldParser.VARIABLE_LENGTH, 15],
["424", 3],
["425", 3],
["426", 3],
];
FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [
// Same format as above
["310", 6],
["311", 6],
["312", 6],
["313", 6],
["314", 6],
["315", 6],
["316", 6],
["320", 6],
["321", 6],
["322", 6],
["323", 6],
["324", 6],
["325", 6],
["326", 6],
["327", 6],
["328", 6],
["329", 6],
["330", 6],
["331", 6],
["332", 6],
["333", 6],
["334", 6],
["335", 6],
["336", 6],
["340", 6],
["341", 6],
["342", 6],
["343", 6],
["344", 6],
["345", 6],
["346", 6],
["347", 6],
["348", 6],
["349", 6],
["350", 6],
["351", 6],
["352", 6],
["353", 6],
["354", 6],
["355", 6],
["356", 6],
["357", 6],
["360", 6],
["361", 6],
["362", 6],
["363", 6],
["364", 6],
["365", 6],
["366", 6],
["367", 6],
["368", 6],
["369", 6],
["390", FieldParser.VARIABLE_LENGTH, 15],
["391", FieldParser.VARIABLE_LENGTH, 18],
["392", FieldParser.VARIABLE_LENGTH, 15],
["393", FieldParser.VARIABLE_LENGTH, 18],
["703", FieldParser.VARIABLE_LENGTH, 30],
];
FieldParser.FOUR_DIGIT_DATA_LENGTH = [
// Same format as above
["7001", 13],
["7002", FieldParser.VARIABLE_LENGTH, 30],
["7003", 10],
["8001", 14],
["8002", FieldParser.VARIABLE_LENGTH, 20],
["8003", FieldParser.VARIABLE_LENGTH, 30],
["8004", FieldParser.VARIABLE_LENGTH, 30],
["8005", 6],
["8006", 18],
["8007", FieldParser.VARIABLE_LENGTH, 30],
["8008", FieldParser.VARIABLE_LENGTH, 12],
["8018", 18],
["8020", FieldParser.VARIABLE_LENGTH, 25],
["8100", 6],
["8101", 10],
["8102", 2],
["8110", FieldParser.VARIABLE_LENGTH, 70],
["8200", FieldParser.VARIABLE_LENGTH, 70],
];
//# sourceMappingURL=FieldParser.js.map