/* * Epirts.js * Free software replacement for Stripe.js implementing a subset of the * Stripe.js API * * @licstart The following is the entire license notice for the * JavaScript code in this file. * * Copyright (C) 2015 Patrick "P. J." McDermott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * As additional permission under GNU GPL version 3 section 7, you * may distribute non-source (e.g. minimized or compacted) forms of * this program without the copy of the GNU GPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend The above is the entire license notice * for the JavaScript code in this file. */ var Stripe = Epirts = (function() { var pub = {}; var _key = undefined; pub.card = (function() { var pub = {}; pub.createToken = function(data, callback) { }; pub.validateCardNumber = function(number) { number = (number + '').replace(/\s|-/g); if (number.match(/\D/)) { return false; } else if (number.length < 13 || number.length > 16) { /* Card number lengths: * * VISA: 13 or 16 * * MasterCard: 16 * * American Express: 15 * * JCB: 16 * * Discover: 16 * * Diners Club: 14-16 */ return false; } else if (!pub.luhnCheck(number)) { return false; } return true; }; pub.luhnCheck = function(number) { var i; var digit; var sum; number += ''; sum = 0; for (i = 0; i < number.length; ++i) { digit = number.charAt(number.length - 1 - i); digit = parseInt(digit); digit *= i % 2 + 1; if (digit > 9) { digit -= 9; } sum += digit; } return sum % 10 === 0; }; pub.validateExpiry = function(month, year) { }; pub.validateCVC = function(cvc) { cvc += ''; if (cvc.match(/\D/)) { return false; } else if (cvc.length < 3 || cvc.length > 4) { return false; } return true; }; pub.cardType = function(number) { var p; var i; /* Approximate IIN prefixes */ p = {}; for (i = 40; i <= 49; ++i) p[i] = 'Visa'; for (i = 51; i <= 55; ++i) p[i] = 'MasterCard'; p[34] = p[37] = 'American Express'; p[35] = 'JCB'; p[60] = p[62] = p[64] = p[65] = 'Discover'; p[30] = p[36] = p[38] = p[39] = 'Diners Club'; return p[(number + '').slice(0, 2)] || 'Unknown'; }; return pub; }()); pub.setPublishableKey = function(key) { if (typeof key !== 'string') { throw new Error('Invalid publishable key'); } if (!key.match(/^pk_[A-Za-z0-9_]+/)) { throw new Error('Invalid publishable key'); } _key = key; }; return pub; }());