我有一个备注字段中的字符串,上面带有一些信用卡,我想屏蔽数字以仅显示最后4位数字。示例:
<cfset str = "Her card no. is 1234567890123456 which is a bogus number.">
如何使str的值读取:
她的卡号是************ 3456,它是伪造的数字。
答案 0 :(得分:5)
如何使str的值读取:
她的卡号是************ 3456,它是伪造的数字。
简单:
停止在文本字段中保存信用卡号!
这是PCI合规性的噩梦。这种做法可能会导致您的公司在接受审核时不再处理在线付款。
您需要尽快停止此操作,并启动一个项目来像这样从以前的所有整数中清除未加密的CC编号。如果要将其抄送号码保存在系统中的其他位置,则只需保存最后4位数字。然后,您可以在邮件中引用该字段。
将注释/便笺保存在任何地方后,您需要清理与抄送号码,银行路由/帐户和社会保险号相匹配的号码模式的数据。
这看起来像生产支持票上的内容,所以我敦促您尽快更改此做法。如果他们备案的抄送是虚假的,那么只需在备忘录中说:
当前归档的卡号无效。
答案 1 :(得分:0)
使用以下命令获取问题中的编号。这甚至可以动态更改数字。
<cfset str="Her card no. is 1234567890123456 which is a bogus number.">
<cfset num=listGetAt(str,5,' ')>
<cfset card=right(num,4)>
<cfset card=listInsertAt(card,1,'************')>
<cfset card=listChangeDelims(card,'')>
<cfset card=replaceList(str,num,card)>
<cfdump var="#card#" />
答案 2 :(得分:0)
我最近想出了一个不同的解决方案,后来在寻找其他解决方案时发现了这个问题。我最初的正则表达式没有检测到所有信用卡格式(空格,破折号,无空格),并且没有正确屏蔽Instagram和GooglePlus的URL,但是这种方法效果很好,并使用Luhn算法仅修改了实际的信用卡值。
使用Adobe ColdFusion或Lucee查看博客条目以获取实时的,可编辑的演示。 https://gamesover2600.tumblr.com/post/176823552659/mask-credit-card-numbers-using-coldfusion
<cfscript>
function maskCC(textFragment){
var response = Javacast("string", arguments.textFragment);
var temp = {};
temp.TestCCs = reMatch("\b(?:\d[ -]*?){13,16}\b", response);
if (arrayLen(temp.TestCCs)){
for (temp.thisCC in temp.TestCCs) {
temp.cleanNum = reReplace(temp.thisCC,"[^[:digit:]]","","all");
if( isValid("creditcard", Temp.cleanNum )){
response = Replace(response, temp.thisCC, "************" & Right(Temp.cleanNum,4), "all");
}
}
}
return response;
}
</cfscript>
<CFOUTPUT>
<pre>
#maskCC('4444 3333 2222 1111')# (with spaces)
#maskCC('4444-3333-2222-1111')# (with dashes)
#maskCC('4444333322221111')# (no separators)
#maskCC('1234567890123456')# (not a CC)
GENERIC TEXT FROM TEXTAREA FORM FIELD:
#maskCC('Here is my unsecure CCNum: 4444333322221111.
My transaction ID IS: 4567123498765283. Please refund.')#
</pre>
</CFOUTPUT>
答案 3 :(得分:-1)
这样的事情怎么样。您可能需要更改正则表达式数字匹配的最大数量,具体取决于您的信用卡号范围:
已更新02.07.18
<cfset str = "Her card no. is 1234567890123456 which is a bogus number.">
<cfset maskall = true>
<cfset regex = ".*[\s]+([0-9]{8,19})[\s]+.*">
<cfset ccNumberProtected = "">
<cfif REFindNoCase(regex,str)>
<cfset ccNumber = REReplaceNoCase(str,regex,"\1")>
<cfif maskall>
<cfset ccNumberProtected = RepeatString("*",Len(ccNumber))>
<cfelse>
<cfset ccNumberProtected = RepeatString("*",Len(ccNumber) - 4) & Right(ccNumber,4)>
</cfif>
</cfif>
<cfif Len(Trim(ccNumberProtected))>
<cfset str = "Her card no. is " & ccNumberProtected & " which is a bogus number.">
<cfelse>
<cfset str = "Card number could not be displayed for security reasons">
</cfif>