UNPKG

@visa/nova-react

Version:

Visa Product Design System Nova React library

18 lines (17 loc) 3.09 kB
/** * Copyright (c) 2025 Visa, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ const e=[4,4,4,4],n={AMERICAN_EXPRESS:{binRegex:RegExp("^3(4|7)\\d*$"),binRegexes:[RegExp("^3(4|7)\\d*$")],brand:"AMERICAN_EXPRESS",lengths:[15],maxLength:15,spacingPattern:[4,6,5]},DISCOVER:{binRegex:RegExp("^6(5|011|4[4-9]|22((1[2-9][6-9])|[2-8][0-9]{2}|9([0-1][0-9]|2[0-5])))\\d*$"),binRegexes:[RegExp("^6011\\d{2,}$"),RegExp("^65\\d$"),RegExp("^64[4-9]\\d{3,}$"),RegExp("^622(1[2-9][6-9]|[2-8][0-9]{2}|9([0-1][0-9]|2[0-5]))\\d*$")],brand:"DISCOVER",lengths:[16,19],maxLength:19,spacingPattern:e},ELO:{binRegex:RegExp("^(50(4175|6(699|7\\d{2})|9\\d{3})|636(297|368))\\d*$"),binRegexes:[RegExp("^50(4175|6(699|7\\d{2}))\\d*$"),RegExp("^509\\d{3,}$"),RegExp("^636(297|368)\\d*$")],brand:"ELO",lengths:[16],maxLength:16,spacingPattern:e},MAESTRO:{binRegex:RegExp("^(5018|5020|5038|5893|6304|6759|676[1-3]|676770|676774)\\d*$"),binRegexes:[RegExp("^(5018|5020|5038|5893|6304|6759|676770|676774)\\d*$"),RegExp("^676[1-3]\\d*$")],brand:"MAESTRO",lengths:[12,13,14,15,16,17,18,19],maxLength:19,spacingPatterns:{13:[4,4,5],15:[4,6,5],16:e,19:[4,4,4,4,3]}},MASTER_CARD:{binRegex:RegExp("^(5[1-5]|2(22[1-9]|2[3-9]\\d|[3-6]\\d{2}|7[0-1]\\d|720))\\d*$"),binRegexes:[RegExp("^5[1-5]\\d*$"),RegExp("^2(22[1-9]|2[3-9]\\d|[3-6]\\d{2}|7[0-1]\\d|720)\\d*$")],brand:"MASTER_CARD",lengths:[16],maxLength:16,spacingPattern:e},VISA:{binRegex:RegExp("^4\\d*$"),binRegexes:[RegExp("^4\\d*$")],brand:"VISA",lengths:[13,16,19],maxLength:19,spacingPattern:e}},t=Object.values(n),g=(e,n)=>{const t=e.length;return!!n?.some((e=>t===e))},a=(e,n=t)=>n.find((n=>n.binRegex.test(e))),r=(n,t=e)=>{let g=0;return(t.reduce(((e,t)=>{const a=g;return g+=t,e+n.slice(a,a+t)+" "}),"")+n.slice(g)).trim()},d=(e,n)=>r(e,n?.spacingPatterns?n.spacingPatterns[e.length]:n?.spacingPattern),R=(e,n=10)=>{const t=e.length-1;let g=0;for(let n=0;n<=t;n++){const a=+e[t-n];if(n%2){const e=2*a;g+=e>9?e-9:e}else g+=a}return g%n==0},s=(e,n)=>void 0===n?e:e.slice(0,n),x=e=>e.replace(/\D/g,"");var i={cardNumberLengthCheck:g,cardValidators:n,cardValidatorsArray:t,defaultSpacingPattern:e,findCardValidatorFromBinRegex:a,formatCardNumber:r,formatCardNumberFromValidator:d,moduloCheck:R,removeCharactersAfterMaxLength:s,removeNonDigits:x};export{g as cardNumberLengthCheck,n as cardValidators,t as cardValidatorsArray,i as default,e as defaultSpacingPattern,a as findCardValidatorFromBinRegex,r as formatCardNumber,d as formatCardNumberFromValidator,R as moduloCheck,s as removeCharactersAfterMaxLength,x as removeNonDigits};