从Coldfusion的备注字段中替换信用卡号

时间:2018-06-21 22:48:50

标签: coldfusion masking

我有一个备注字段中的字符串,上面带有一些信用卡,我想屏蔽数字以仅显示最后4位数字。示例:

<cfset str = "Her card no. is 1234567890123456 which is a bogus number.">

如何使str的值读取:

  

她的卡号是************ 3456,它是伪造的数字。

4 个答案:

答案 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>