信用卡验证脚本说明

Joe*_*les 1 javascript

我想知道用于验证主要信用卡的每个字符的解释.我用Google搜索并找到了以下解释,但它们并没有完全解释它(例如是什么?:意思?等)

签证= ^4[0-9]{12}(?:[0-9]{3})?$

所有Visa卡号均以4开头.新卡有16位数.旧卡有13个.

万事达卡= ^5[1-5][0-9]{14}$

所有万事达卡号码都以数字51到55开头.所有号码都有16位数字.

美国运通= ^3[47][0-9]{13}$

美国运通卡号码以34或37开头,有15位数字

JCB = ^(?:2131|1800|35\d{3})\d{11}$

从2131或1800开始的JCB卡有15位数字.以35开头的JCB卡有16位数字.

大来俱乐部= ^3(?:0[0-5]|[68][0-9])[0-9]{11}$

大莱卡号码以300至305,36或38开头.所有号码均为14位数.Diners Club卡以5开头,有16位数字.这些是大莱卡和万事达卡之间的合资企业,应该像万事达卡一样处理.

tho*_*ter 5

您提供的规则实际上并未完全验证信用卡号,他们只检查正确的位数.

如果您真的想验证信用卡号,您需要确保校验位(最后一位数)与Luhn算法的其余部分匹配- 更多信息和Javascript中的工作代码可在此处获得.使用您提供的正则表达式,4000000000000000将被视为有效的VISA卡号,但当您检查校验位时,则不会.

要解释您提供的正则表达式:

^表示字符串的开头,$表示结束.这些必须始终用于锚定正则表达式,除非您希望它匹配较大字符串的子字符串.

[0-9]表示任何数字(0到9或其间的任何数字).您也可以使用\d此(您的其他示例之一). \d是一个特殊的字符,意思是"任何数字".还有其他几个这样的特殊字符,例如\s"任何空白字符".

{12} 意味着重复前一个字母或括号模式12次(不多也不少).

(?:刚开始一个括号模式.(?:和之间的区别(是,(?:它不会捕获稍后检索的模式(使用后引用).这些示例都不使用反向引用,因此(?:很好(并且通常更有效).

)结束括号图案.括号模式仅用于将多个字母/模式放入组中.

?表示前一个字母或括号图案是可选的 - 它可以是0或1次.顺便说一下,{0,1}会做同样的事情.

其余的都是不言自明的,除了:

[68]这意味着无论是 6 8.如果它在那里一个破折号,像[6-8],这将意味着6 8,其中将包括7为好.但事实并非如此,因此不包括7.