בדיקת תקינות מספרי זהות, אשראי וישראכרד מקומי ב NODEJS
-
הורדתי את הספרייה הזו https://www.npmjs.com/package/card-validator
וביצעתי בה מספר שינויים.
א. הוספתי בדיקת תקינות מספר אשראי ישראלי.
ב. הוספתי תמיכת בבדיקת כרטיס אשראי מקומי בן 9 ספרות של ישראכרד. (כולל האלגוריתם כמו שמוסבר כאן http://halemo.com/info/isracard/index.html)
להלן השינויים וקובץ מוכן להורדה.
בקובץ node_modules\card-validator\index.js הוספתי פונקצית בדיקת מספר זהות'use strict'; module.exports = { number: require('./src/card-number'), expirationId: require('./src/expiration-id'), expirationDate: require('./src/expiration-date'), expirationMonth: require('./src/expiration-month'), expirationYear: require('./src/expiration-year'), cvv: require('./src/cvv'), postalCode: require('./src/postal-code'), creditCardType: require('credit-card-type') };
כמוכ הוספתי קובץ בנתיב node_modules\card-validator\src\expiration-id.js
ותוכנו הוא'use strict'; function expirationId(identifier) { var sum = 0; var alt = false; var i = identifier.length - 1; var num; while(identifier.length<9) { identifier = '0' + identifier ; } while (i >= 0) { num = parseInt(identifier.charAt(i), 10); if (alt) { num *= 2; if (num > 9) { num = (num % 10) + 1; // eslint-disable-line no-extra-parens } } alt = !alt; sum += num; i--; } return sum % 10 === 0; } module.exports = expirationId;
בקובץ node_modules\card-validator\src\luhn-10.js
הוספתי אלגוריתם בדיקת כרטיס של ישראכרד/* * Luhn algorithm implementation in JavaScript * Copyright (c) 2009 Nicholas C. Zakas * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ 'use strict'; function luhn10(identifier) { var sum = 0; var alt = false; var i = identifier.length - 1; var num; while (i >= 0) { num = parseInt(identifier.charAt(i), 10); if (alt) { num *= 2; if (num > 9) { num = (num % 10) + 1; // eslint-disable-line no-extra-parens } } alt = !alt; sum += num; i--; } let result = sum % 10 === 0; if (result){ return result; } else{ return luhn_isracard(identifier); } } function luhn_isracard(identifier) { var sum = 0; var i = identifier.length - 1; var num; var ii = 1; if (parseInt(identifier) === 123456789) { return false; } while(identifier.length<9) { identifier = '0' + identifier ; } while (i >= 0) { num = parseInt(identifier.charAt(i), 10); num *= ii; sum += num; ii++; i--; } return sum % 11 === 0; } module.exports = luhn10;
בקובץ node_modules\card-validator\node_modules\credit-card-type\lib\card-types.js
הוספתי אובייקט של ישראכרדisracard: { niceType: 'Isracard', type: 'isracard', patterns: [ 0,1,2,3,4,5,6,7,8,9 ], gaps: [3, 6], lengths: [8,9], code: { name: 'CVC', size: 3 } }
בקובץ node_modules\card-validator\node_modules\credit-card-type\index.js
הוספתי את השורות עבור ישראכרדvar cardNames = { VISA: 'visa', MASTERCARD: 'mastercard', AMERICAN_EXPRESS: 'american-express', DINERS_CLUB: 'diners-club', DISCOVER: 'discover', JCB: 'jcb', UNIONPAY: 'unionpay', MAESTRO: 'maestro', ELO: 'elo', MIR: 'mir', HIPER: 'hiper', HIPERCARD: 'hipercard', ISRACARD: 'isracard' }; var ORIGINAL_TEST_ORDER = [ cardNames.VISA, cardNames.MASTERCARD, cardNames.AMERICAN_EXPRESS, cardNames.DINERS_CLUB, cardNames.DISCOVER, cardNames.JCB, cardNames.UNIONPAY, cardNames.MAESTRO, cardNames.ELO, cardNames.MIR, cardNames.HIPER, cardNames.HIPERCARD, cardNames.ISRACARD, ];
למי שזה יכול לעזור, בשמחה
מצ"ב בקובץ
.card-validator.rar