银行卡号脱敏

识别并打码银行卡号,配合 Luhn 校验区分真实卡号与普通数字,本地处理不上传。

银行卡号脱敏

全部在浏览器本地处理,原始数据不会离开您的电脑,也不写入任何存储。

支付卡数据的特殊要求

银行卡号属于支付敏感信息。PCI DSS 对存储和展示有明确规定:卡号必须加密存储,展示时必须掩码,除末四位和首位六位外不得显示其他数字,安全码和完整磁道数据在授权后不得存储。

国内监管对支付信息的要求同样严格,涉及银行卡信息的系统在等保测评中通常会被提高定级,并要求部署专门的加密和审计措施。这不是能靠开发规范自觉遵守的事,需要技术手段强制。

业务上必须区分开的四类数据

  • 卡号:需要掩码展示,存储加密,可用于绑定和查询
  • 有效期:属于敏感认证数据,一般不单独存储
  • 安全码:授权后不得以任何形式留存,包括日志和缓存
  • 磁道数据:同样不得留存,只在授权链路中透传

很多系统为了「方便用户下次支付」而保存安全码,这既违反规范也放大了泄露后果。正确做法是用支付机构返回的令牌代替卡号,后续扣款走令牌,本地不碰真实卡号。

关于 Luhn 校验

Luhn 算法是卡号的模十校验,能发现单数字错误和相邻数字调换,用于区分录入错误。但它只能说明格式合规,不能证明卡号真实存在。本工具用它帮助判断哪些数字串更像卡号,不作为任何形式的验证依据。

脱敏方式对照

方式保留信息适用场景可逆性
掩码替换长度、首尾字符测试数据、展示页面不可逆
中间省略前缀与后缀核对身份、客服查询不可逆
哈希替换无,但同值同哈希需要关联分析的场景不可逆
加密存储完整原文需要还原的业务流程可逆,需密钥
随机替换格式、长度开发测试环境不可逆

选择哪种方式取决于后续是否要还原。客服核对身份用中间省略,开发测试用随机替换,需要保留统计规律又要防泄露用哈希替换。加密虽然可逆,但密钥管理成本高,不是所有场景都值得。

常见问题

Luhn 校验通过就代表卡号有效吗?▼
不代表。Luhn 只校验格式,任何人按规则都能构造出通过校验的数字串。卡号是否有效只能在支付授权环节由发卡行确认。
为什么银行卡号一般是 16 到 19 位?▼
不同卡组织的规则不同。常见借记卡 19 位,信用卡 16 位,部分卡种 13 到 15 位。本工具按 12 到 19 位范围识别,覆盖主流卡种。
卡号能存在数据库里吗?▼
可以存,但必须加密,并且展示时掩码。安全码和磁道数据不得存储。更推荐的做法是用支付机构返回的令牌代替卡号,本地系统不接触真实卡号,合规压力小很多。
日志里出现了完整卡号怎么办?▼
立即清理历史日志,并在日志框架层加上卡号过滤规则。同时评估是否需要按数据泄露流程上报,取决于日志的访问范围和留存时间。
脱敏后的卡号还能用于对账吗?▼
保留前六位和后四位的掩码方式可以支撑大部分对账场景,因为前六位是发卡行标识,后四位能区分同一用户的多张卡。精确匹配需要用令牌或哈希列。