首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >屏蔽信用卡号

屏蔽信用卡号
EN

Stack Overflow用户
提问于 2011-08-19 00:33:04
回答 5查看 4.6K关注 0票数 1

在PHP中屏蔽信用卡号码的最好方法是什么?

信用卡号码不一定是有效的。所以不需要做Luhn算法。只要它与模式匹配,就用XXXXXXXX替换它。

到目前为止,我所拥有的:

代码语言:javascript
复制
<?php

$str = "The quick brown fox jumps over 5192696222257727 dog.";

$credit_card_re = '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|622((12[6-9]|1[3-9][0-9])|([2-8][0-9][0-9])|(9(([0-1][0-9])|(2[0-5]))))[0-9]{10}|64[4-9][0-9]{13}|65[0-9]{14}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})*$/';
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-19 00:38:40

正则表达式可以很好地工作,所以你所拥有的是好的。

要实际执行正则表达式,请使用以下代码:

代码语言:javascript
复制
$str = "The quick brown fox jumps over 5192696222257727 dog.";

$masked = preg_replace("/(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})/", "XXXXXXXX", $str);

然后你可以用$masked做任何事情。

编辑:修复了正则表达式,只有当整个字符串都是数字时,你才会匹配它。

票数 2
EN

Stack Overflow用户

发布于 2011-08-19 00:39:34

代码语言:javascript
复制
$cc = "6789765435678765";
$cc = str_pad(substr($cc, -4), strlen($cc), '*', STR_PAD_LEFT);
票数 7
EN

Stack Overflow用户

发布于 2016-12-20 10:17:53

一个无正则表达式的解决方案,适用于任何长度的字符串,只显示最后4个:

代码语言:javascript
复制
function mask_cc( $number )  {

    return  substr_replace($number, str_repeat('X', strlen( $number ) - 4), 0, strlen( $number ) - 4);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7110891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档