如何屏蔽文本中的信用卡号码掩码?

时间:2018-05-09 06:19:52

标签: regex regex-negation

我的网站上有一个表单,我的客户通过此表单向我发送消息。有时他们会在信息上写下他们的信用卡号码。所以这非常重要。我想屏蔽这些信用卡号码。但当然卡号不会定期出现。

  

示例1:1111222233334444

     

实施例2:4444 3333 2222 1111

     

实施例3:4444-3333-2222-1111

     

示例4:4444 - 3333 - 2222 - 1111

     

例5:4444--3333--2222-1111

所以我可以屏蔽例如1,2和3.但如果数字之间有多个空格或短划线,我就不能。

这是我的最后一个正则表达式:

preg_replace("/(?:\b| )([3456]\d{3})([ -]+){0,1}\d{4}([ -]+){0,1}\d{4}([ -]+){0,1}(\d{0})/", "$1********$2", $a1);

这个正则表达式的结果:

  

结果1:4444 ******** 1111

     

结果2:4444 ******** 1111

     

结果3:4444 ******** - 1111

     

结果4:4444 ******** - 1111

     

结果5:4444 ******** - 1111

那么我应该怎么做正则表达式?感谢。

3 个答案:

答案 0 :(得分:3)

我建议您通过用户界面将您信用卡号的验证从该号码的演示文稿分离给您的用户吗?假设您只存储了有效的信用卡号码,那么可以安全地假设每个号码至少有8位数字。如果是这样,那么您可以使用毯式正则表达式仅显示前4位和后8位数字:

$cc = "4444--3333--2222--1111";
echo preg_replace("/(\d{4}).*(\d{4})/", "$1********$2", $cc);

4444********1111

Demo

您可能会指出,这会在每个卡号之间放置相同数量的星号。但是,再一次,这是一件好事,因为它使得一个窥探者更难以捕捉到实际未被掩盖的数字。

修改

这是一个更聪明的正则表达式,它会突出显示任意数字的中间部分,只留下第一个和最后4个字符:

$cc = "4444--3333--2222--1111";
echo preg_replace("/(?<=.{4}).(?=.{4})/", "*", $cc);

4444**************1111

请注意,此解决方案不会删除11114444中的任何内容作为理论输入。

答案 1 :(得分:2)

  

如何在 [with regex] 的文本中屏蔽信用卡号码掩码?

别。

  

有时他们会在信息上写下信用卡号码。

他们真的不应该。不要鼓励这种行为。它不是PCI compliant

  

什么是PCI合规性?

     

支付卡行业数据安全标准(PCI DSS)适用于接受信用卡付款的任何规模的公司。如果贵公司打算接受信用卡付款,存储处理传输持卡人数据,则需要安全地托管数据并符合PCI标准托管服务提供商。

当您通过网站接受信用卡数据时,请使用经过批准的服务提供商,如Stripe,PayPal,BlueSnap,SecurionPay等。这些服务并不是非常受欢迎,因为它很难制作支付系统,但因为它们是很难做到(和合法)。它们都有PHP API,因此您可以让人们输入您从未见过的信用卡数据,并且仍然会根据您同意的金额向他们收费。

例如,如果您使用的是Stripe,并且您希望告知您的客户他们注册了哪张信用卡,their card object has a last4 property会提供该卡的最后四位数字:此时您永远不会知道所有信用卡卡号,你甚至不必考虑是否给前四个最后四个是安全违规。

Further guidelines

  

切勿以任何形式存储电子轨道数据或卡安全号码

     

虽然您可能有商业原因存储信用卡信息,但处理规则明确禁止存储卡的安全代码或包含在磁条背面的任何“跟踪数据”信用卡。

     

许多首字母缩略词(包括CVV2,CID和CSC)所称的卡安全号码是Visa / MasterCard / Discover卡背面的三位数字或American Express卡前面的4位数字。它旨在为商家提供一种方式来了解通过电话或通过互联网授权交易的客户是否实际拥有该卡。仅当安全代码从未与卡号一起存储时,此方法才有效。电子存储使这很容易。您只是不为安全代码创建字段。对于纸张存储,您需要在成功处理交易之后和存储纸质授权表单之前编辑(用黑笔划掉以使其不可读)安全代码。 [...]

     

显然,您既不应存储安全码,也不应故意跟踪数据。但是,您需要确保不会无意中存储它。为此,请确保仅使用经过批准的硬件和软件 [...]

     

确保信用卡帐号的所有电子存储都已加密,并且所有纸张存储都是安全的

     

[...] 例如,如果您处理重复或重复交易,信用卡号码的电子存储也很常见。如果您这样做,则需要确保永远不会以未加密的方式存储这些文件。您需要确保使用强大的加密算法加密任何电子存储。这样,如果您的计算机被盗,或者您办公室中的某人未经授权访问,您可以获得一定程度的信用卡保护。

     

有许多服务提供商提供安全存储 - 作为独立服务或作为支付处理包的一部分。这些服务通常为您存储的卡号提供“令牌”。您可以将令牌存储在任何不安全的文件中。当您准备好处理付款时,您只需向服务提供商发送令牌,它就会检索完整的卡号,仅用于处理付款。 (这在技术上比这更复杂,但你明白了。)确定使用PCI DSS验证提供商 [...]

答案 2 :(得分:0)

检查下一个正则表达式\b([3-6]\d{3})(?: *-* *\d{4}){2} *-* *(\d{4})\b