wjshipbill
Version:
Siyool QR Bill generation in Node.js and browsers
122 lines • 4.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mmToPoints = exports.formatAmount = exports.formatSCORReference = exports.formatQRReference = exports.calculateQRReferenceChecksum = exports.isQRReferenceValid = exports.isQRReference = exports.formatIBAN = exports.isIBANValid = exports.isQRIBAN = void 0;
function isQRIBAN(iban) {
iban = iban.replace(/ /g, "");
const QRIID = iban.substr(4, 5);
return (+QRIID >= 30000 && +QRIID <= 31999);
}
exports.isQRIBAN = isQRIBAN;
function isIBANValid(iban) {
iban = iban.replace(/ /g, "");
iban = iban.toUpperCase();
//-- Move country code + checksum to end
iban = iban.substr(4) + iban.substr(0, 4);
//-- Convert letters to numbers, beginning with A = 10...Z = 35
const A = "A".charCodeAt(0);
const ibanArr = iban.split("");
for (let i = 0; i < ibanArr.length; i++) {
const charCode = ibanArr[i].charCodeAt(0);
if (charCode >= A) {
ibanArr[i] = charCode - A + 10 + "";
}
}
//-- Calculate mod9710
return mod9710(ibanArr.join("")) === 1;
}
exports.isIBANValid = isIBANValid;
function formatIBAN(iban) {
var _a;
iban = iban.replace(/ /g, "");
const ibanArray = iban.replace(/ /g, "").match(/.{1,4}/g);
return (_a = ibanArray === null || ibanArray === void 0 ? void 0 : ibanArray.join(" ")) !== null && _a !== void 0 ? _a : iban;
}
exports.formatIBAN = formatIBAN;
function isQRReference(reference) {
reference = reference.replace(/ /g, "");
if (reference.length === 27) {
if (!isNaN(+reference)) {
return true;
}
}
if (reference.replace(/ /g, "").length <= 25) {
return false;
}
throw new Error("Reference is not valid.");
}
exports.isQRReference = isQRReference;
function isQRReferenceValid(reference) {
reference = reference.replace(/ /g, "");
if (Number.isNaN(reference)) {
return false;
}
if (reference.length !== 27) {
return false;
}
const ref = reference.substr(0, 26);
const checksum = reference.substr(26, 1);
const calculatedChecksum = calculateQRReferenceChecksum(ref);
return calculatedChecksum === checksum;
}
exports.isQRReferenceValid = isQRReferenceValid;
function calculateQRReferenceChecksum(reference) {
return mod10(reference);
}
exports.calculateQRReferenceChecksum = calculateQRReferenceChecksum;
function formatQRReference(reference) {
reference = reference.replace(/ /g, "");
let referenceArray = [];
const match = reference.substring(2).match(/.{1,5}/g);
if (match !== null) {
referenceArray = [reference.substring(0, 2)].concat(match);
}
return referenceArray.join(" ");
}
exports.formatQRReference = formatQRReference;
function formatSCORReference(reference) {
reference = reference.replace(/ /g, "");
let referenceArray = [];
const match = reference.match(/.{1,4}/g);
if (match !== null) {
referenceArray = match;
}
return referenceArray.join(" ");
}
exports.formatSCORReference = formatSCORReference;
function formatAmount(amount) {
const amountString = amount.toFixed(2) + "";
const amountArray = amountString.split(".");
let formattedAmountWithoutDecimals = "";
for (let x = amountArray[0].length - 1, i = 1; x >= 0; x--, i++) {
formattedAmountWithoutDecimals = amountArray[0][x] + formattedAmountWithoutDecimals;
if (i === 3) {
formattedAmountWithoutDecimals = " " + formattedAmountWithoutDecimals;
i = 0;
}
}
return formattedAmountWithoutDecimals + "." + amountArray[1];
}
exports.formatAmount = formatAmount;
function mmToPoints(mm) {
return Math.round(mm * 2.83465);
}
exports.mmToPoints = mmToPoints;
function mod9710(iban) {
let remainder = iban;
let block;
while (remainder.length > 2) {
block = remainder.slice(0, 9);
remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
}
return parseInt(remainder, 10) % 97;
}
function mod10(code) {
code = code.replace(/ /g, "");
const table = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5];
let carry = 0;
for (let i = 0; i < code.length; i++) {
carry = table[(carry + parseInt(code.substr(i, 1), 10)) % 10];
}
return ((10 - carry) % 10).toString();
}
//# sourceMappingURL=utils.js.map