emvqr
Version:
help to work with emv qr code specification for digital payments
210 lines (203 loc) • 5.01 kB
JavaScript
const dataObjectsSchema = {
'00': {
name: 'Payload Format Indicator',
presence: 'M',
},
'01': {
name: 'Point of Initiation Method',
presence: 'O',
},
'02-51': {
name: 'Merchant Account Information',
presence: 'M',
},
'52': {
name: 'Merchant Category Code',
presence: 'M',
},
'53': {
name: 'Transaction Currency',
presence: 'M',
},
'54': {
name: 'Transaction Amount',
presence: 'C',
},
'55': {
name: 'Tip or Convenience Indicator',
presence: 'O',
},
'56': {
name: 'Value of Convenience Fee Fixed',
presence: 'C',
},
'57': {
name: 'Value of Convenience Fee Percentage',
presence: 'C',
},
'58': {
name: 'Country Code',
presence: 'M',
},
'59': {
name: 'Merchant Name',
presence: 'M',
},
'60': {
name: 'Merchant City',
presence: 'M',
},
'61': {
name: 'Postal Code',
presence: 'O',
},
'62': {
name: 'Additional Data Field Template',
presence: 'O',
},
'63': {
name: 'CRC',
presence: 'M',
},
'64': {
name: 'Merchant Information— Language Template',
presence: 'O',
},
'65-79': {
name: 'RFU for EMVCo',
presence: 'O',
},
'80-99': {
name: 'Unreserved Templates',
presence: 'O',
},
};
const dataObjectsSchemaSubData = {
'00': {
name: 'Global Unique Identifier',
presence: 'M',
},
'01': {
name: 'Merchat PAN',
presence: 'O',
},
'02': {
name: 'Merchant ID',
presence: 'M',
},
'03': {
name: 'Merchant Criteria',
presence: 'M',
},
};
const dataObjectsAdditiolanFields = {
'01': {
name: 'Bill Number',
presence: 'O',
},
'02': {
name: 'Mobile Number',
presence: 'O',
},
'03': {
name: 'Store Label',
presence: 'O',
},
'04': {
name: 'Loyalty Number',
presence: 'O',
},
'05': {
name: 'Reference Label',
presence: 'O',
},
'06': {
name: 'Customer Label',
presence: 'O',
},
'07': {
name: 'Terminal Label',
presence: 'O',
},
'08': {
name: 'Purpose of Transaction',
presence: 'O',
},
'09': {
name: 'Additional Consumer Data Request',
presence: 'O',
},
'10-49': {
name: 'RFU for EMVCo',
presence: 'O',
},
'50-99': {
name: 'Payment System specific templates.',
presence: 'O',
},
};
const dataObjectsPaymentSpecificTemplate = {
'00': {
name: 'Globally Unique Identifier',
presence: 'O',
},
'01-99': {
name: 'Payment System specific',
presence: 'O',
},
}
function getDataObject(stringId) {
let dataObject = dataObjectsSchema[stringId];
if (!dataObject) {
const id = parseInt(stringId);
(id >= 2 && id <= 51) && (dataObject = dataObjectsSchema['02-51']);
(id >= 65 && id <= 79) && (dataObject = dataObjectsSchema['65-79']);
(id >= 80 && id <= 99) && (dataObject = dataObjectsSchema['80-99']);
}
return dataObject;
}
function getDataObjectSubData(stringId) {
let dataObject = dataObjectsSchemaSubData[stringId];
if (!dataObject) {
}
return dataObject;
}
function getDataObjectAdditionalFields(stringId) {
let dataObject = dataObjectsAdditiolanFields[stringId];
if (!dataObject) {
const id = parseInt(stringId);
(id >= 10 && id <= 49) && (dataObject = dataObjectsAdditiolanFields['10-49']);
(id >= 50 && id <= 99) && (dataObject = dataObjectsAdditiolanFields['50-99']);
}
return dataObject;
}
function getDataObjectPaymentSpecifi(stringId) {
let dataObject = dataObjectsPaymentSpecificTemplate[stringId];
if (!dataObject) {
const id = parseInt(stringId);
(id >= 1 && id <= 99) && (dataObject = dataObjectsPaymentSpecificTemplate['01-99']);
}
return dataObject;
}
function getDataObjectName(stringId) {
const dataObject = getDataObject(stringId);
return dataObject ? dataObject.name : undefined;
}
function getDataObjectNameSubData(stringId) {
const dataObject = getDataObjectSubData(stringId);
return dataObject ? dataObject.name : undefined;
}
function getDataObjectAdditionalFieldsName(stringId) {
const dataObject = getDataObjectAdditionalFields(stringId);
return dataObject ? dataObject.name : undefined;
}
function getDataObjectNamePaymentSpecific(stringId) {
const dataObject = getDataObjectPaymentSpecifi(stringId);
return dataObject ? dataObject.name : undefined;
}
module.exports = {
getDataObjectName,
getDataObjectNameSubData,
getDataObjectAdditionalFieldsName,
getDataObjectNamePaymentSpecific
};