2017-08-30 62 views
0

遮蔽信用卡号码,如果一个CC编号进入

var cardNumber  = '4761640026883566'; 
 
var cardNumberDashed = '4761-6400-1234-2345'; 
 
var cardNumberSpaced = '4761 6400 1234 3523'; 
 

 
var ensureOnlyNumbers = R.replace(/[^0-9]+/g, ''); 
 
var maskAllButLastFour = R.replace(/[0-9](?=([0-9]{4}))/g, '*'); 
 
var hashedCardNumber = R.compose(maskAllButLastFour, ensureOnlyNumbers); 
 

 
document.body.innerHTML = hashedCardNumber(cardNumber)  + '<br/>' + 
 
          hashedCardNumber(cardNumberDashed) + '<br/>' + 
 
          hashedCardNumber(cardNumberSpaced);

我的情况有点复杂,我有一个<textarea>,我在聊天窗口中的消息字段使用。 我想掩盖在此聊天中发送的所有信用卡号码,但不是每个号码,因为我确实需要来自客户端的10-15位数字的会员号码。

<textarea id="postMessage"></textarea>

我跟着代码在此的jsfiddle:http://jsfiddle.net/7odv6kfk/但它仅适用于具有信用卡号码输入栏。

我该怎么做?

谢谢!

+1

发布您的代码在你的问题 – j08691

+0

你可能想,如果找出来这甚至是合法的。 PCI合规人员很可能想要打你一巴掌。 –

+0

@BrianGottier如何合法地做到这一点?我不希望我的客户向我发送信用卡号码,他们有时会这样做! –

回答

0

http://jquerycreditcardvalidator.com/ 这个库可以帮助你也可以只检测信用卡号码,并避免其他数字

VAR的结果= $( '#cardnumber')validateCreditCard({接受:[ '签证', '万事达卡' ]})

+0

谢谢,但Qusai我希望它在对话期间检测数字,我怎么能这样运行它? –

0

在这里你可以找到有效的CC数字格式和正则表达式匹配他们: http://www.regular-expressions.info/creditcard.html

的问题是,旧的VISA卡有13位数字,美国运通有15个数字和一些JCB卡有15个数字。这与您的会员编号冲突。你需要支持16位的CC号码吗?

下面的代码演示了如何用星号代替16位CC号码:

var re = /\b(\d[ -]?){15}\d\b/g; 
var text = "My CC number is 4761640026883566 (or 4761-6400-1234-2345, or 4761 6400 1234 3523). My membership number is 1234567890123." 

document.body.innerHTML = text.replace(re, "****"); 

输出:

My CC number is **** (or ****, or ****). My membership number is 1234567890123.

+0

谢谢!好东西,我不接受我的网站AMEX支付:D –

+0

增加了一个例子,说明如何用“****”代替16位CC号码。 –