react-native-moyasar-sdk
Version:
Official React Native Moyasar SDK - Integrate Credit Cards, Apple Pay, Samsung Pay, and STC Pay with simple interfaces for a seamless payment experience in your React Native app
55 lines (53 loc) • 1.87 kB
JavaScript
;
import { CreditCardNetwork } from "../models/credit_card_network.js";
import { inMadaRange } from "./mada_util.js";
export function getCreditCardNetworkFromNumber(input) {
if (inMadaRange(input)) {
return CreditCardNetwork.mada;
} else if (new RegExp('^3[47]').test(input)) {
return CreditCardNetwork.amex;
} else if (new RegExp('^4').test(input)) {
return CreditCardNetwork.visa;
} else if (new RegExp('^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)').test(input)) {
return CreditCardNetwork.master;
}
return CreditCardNetwork.unknown;
}
export function isValidLuhn(cardNumber) {
const digits = cardNumber.split('').reverse().map(digit => parseInt(digit, 10));
const sum = digits.reduce((acc, digit, index) => {
if (index % 2 === 1) {
const doubled = digit * 2;
return acc + (doubled > 9 ? doubled - 9 : doubled);
}
return acc + digit;
}, 0);
return sum % 10 === 0;
}
/**
* Maps an array of network strings to CreditCardNetwork enum values
* @param networks Array of network strings (e.g. ["visa", "mada"])
* @returns Array of CreditCardNetwork enum values
*/
export function mapCardNetworkStrings(networks) {
return networks.map(network => {
const normalizedNetwork = network.toLowerCase().trim();
switch (normalizedNetwork) {
case 'mada':
return CreditCardNetwork.mada;
case 'visa':
return CreditCardNetwork.visa;
case 'master':
case 'mastercard':
case 'master card':
return CreditCardNetwork.master;
case 'amex':
case 'americanexpress':
case 'american express':
return CreditCardNetwork.amex;
default:
return CreditCardNetwork.unknown;
}
}).filter(network => network !== CreditCardNetwork.unknown);
}
//# sourceMappingURL=credit_card_utils.js.map