当前位置: 首页 > 知识库问答 >
问题:

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

东郭弘方
2023-03-14

我的网站上有一个表格,我的客户用这个表格给我发信息。有时他们会在信息上写上他们的信用卡号。所以这真的很关键。我想掩盖这些信用卡号。但是当然卡号不会定期出现。

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

宰父正真
2023-03-14

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

充培
2023-03-14

如何在文本中[使用正则表达式]屏蔽信用卡号掩码?

有时他们会把信用卡号写在短信上。

他们真的不应该。不要鼓励这种行为。它不符合PCI:

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

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

例如,如果您正在使用Stripe,并且希望通知客户他们注册了什么样的信用卡,那么他们的卡对象具有一个属性,该属性提供了卡的最后四位数字:此时,您永远不知道完整的信用卡号,甚至不必考虑提供前四位和后四位是否违反了安全。

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

信用卡安全号被CVV2、CID和CSC等许多首字母缩略词所称,是Visa/MasterCard/Discover卡背面的三位数或美国运通卡正面的四位数。它旨在为商家提供一种方式,以了解授权通过电话或互联网进行交易的客户是否实际拥有该卡。只有当安全代码从未与卡号一起存储时,这种方法才有效。电子存储使这变得容易。您只是不为安全代码创建字段。对于纸质存储,您需要在成功处理交易后和存储纸质授权表之前对安全代码进行修订(用深色笔划掉以使其无法读取)[…]

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

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

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

吴同
2023-03-14

我可以建议您将验证您的信用卡号与通过用户界面向用户展示该号码分开吗?假设您只存储了有效的信用卡号码,那么假设每个号码至少有8位数字可能是安全的。如果是这样,那么您可以只使用总括正则表达式来显示前4位和后8位:

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

4444********1111

你可能会指出,这会在每个卡号之间放置相同数量的星星。但是,再说一次,这是一件好事,因为这让窥探者更难找出真正的未掩盖数字。

编辑:

这是一个更智能的正则表达式,它将从任何数字的中间部分开始,只留下第一个和最后4个字符:

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

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

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

 类似资料:
  • 问题内容: 我们的Web应用程序必须与PCI兼容,即,它不得存储任何信用卡号。该应用程序是大型机系统的前端,它在内部处理抄送号,并且-正如我们刚刚发现的那样- 有时仍会在其响应屏幕之一上吐出完整的抄送号。默认情况下,这些响应的全部内容都记录在调试级别,并且从这些响应解析的内容也可以记录在许多不同的位置。因此,我无法找到此类数据泄漏的根源。我必须确保CC号在我们的日志文件中被屏蔽。 正则表达式部分不

  • 我对regex很陌生,我正在尝试使用正则表达式将作为对话一部分的信用卡号转换为类似492900******2222 由于它可以来自任何对话,它旁边可能包含字符串或可能具有不一致的格式,因此基本上所有以下内容都应按照上面的示例格式化: 你好我的号码是492900001111222 号码4929000011112222好吗? 4929 0000 1111 2222 4929-0000-1111-222

  • 问题内容: 我正在尝试屏蔽Java中的密码。Sun Java已提出一种掩盖密码的方法,如下所示。 屏蔽密码 它使用一种简单的方法来做到这一点。 但是这种方法有几个缺点。 如果用户使用箭头键+删除键,则会显示密码。 如果用户不小心同时按下了两个键(极高的打字速度),某些字符将不会被掩盖。 你们认为有什么方法可以获得100%正确的遮罩吗? 问题答案: 使用Console.readPassword()。

  • 精明的加法学专家会注意到,它只能加到62位。我在编译器和芯片设计方面的经历告诉我,保留位值黄金。所以我们有两个(设置为零)。 那么这是否意味着: 问题一: ~表示36位移位,包含10位类型Id和其余36位本地Id: #00000000000000000000# ShardID 3429的 二进制=1101 0110 0101 因此(hashedValue>>46)=00000 0 110 1 01

  • 我做了一个这样的设计 如何用CSS屏蔽背景? 我试过这样的代码 null null 我使用的掩码图像是 https://i.stack.imgur.com/fg2k5.png https://i.stack.imgur.com/zmylj.png 你们能告诉我我的代码出了什么问题吗?我知道我可以只导入到png,但我尝试使用css

  • 我需要在登录时屏蔽敏感信息。我们使用集成框架提供的wire-tap进行日志记录,我们已经设计了许多接口,这些接口使用wire-tap进行日志记录。我们目前正在使用spring boot 2.1和spring集成。