银行卡四要素核验怎么接:二/三/四要素选型、签名坑与结果排查
银行卡四要素核验完整指南:二/三/四要素验的是不同维度(卡归属/身份真实/手机绑定)、四要素签名只算5字段的坑、bankPreMobile参数名、不一致五步排查、卡号掩码存储规范、九项上线检查单。
绑卡、代发、开户、提现——凡是涉及"钱从谁的卡进出",第一步都是确认这张卡是不是这个人的。银行卡四要素核验就是干这个的:卡号、姓名、身份证号、银行预留手机号四项一起验,全部匹配才算通过。
这篇讲清二/三/四要素怎么选、联调最容易踩的坑、以及结果不符合该信谁。
一、二要素、三要素、四要素:验的东西根本不同
别把三档当成"严格程度的升级",它们验的其实是不同维度的真实性:
| 档位 | 字段 | 验的是什么 | 拦得住什么 |
|---|
| 二要素 | 卡号 + 姓名 | 卡是否属于此人 | 用他人卡号冒名、错卡号 |
|---|---|---|---|
| 三要素 | 卡号 + 姓名 + 身份证号 | 卡是否属于此人,且身份信息真实 | 二要素 + 伪造身份的洗钱/套现 |
| 四要素 | 卡号 + 姓名 + 身份证号 + 银行预留手机号 | 卡是否属于此人,且手机号在银行侧绑定在这张卡上 | 三要素 + 拿到身份信息但控制不了预留手机的人 |
四要素的关键差异在最后一项:它验的是"手机号与卡在银行侧的绑定关系",这个关系存在于银行核心系统里,用户无法伪造。所以四要素通过,意味着"这个人同时掌握卡、身份信息和银行预留手机"——这是绑卡支付场景能接受的信任级别。
选型判断只有一句话:这笔钱出去后能不能追回?
二、联调最容易踩的坑:签名里没有身份证号和手机号
这是我最想提醒的一条,因为文档里写了但极容易被忽略:
四要素的签名只算 5 个字段:mall_id+realname+cardnum+tm+appkey。idcard和bankPreMobile不参与签名。
后果是什么?签名永远算对,请求也永远发得出去,但如果 idcard 或 bankPreMobile 拼错了(少一位、参数名写成 bankMobile 之类),服务端不会因为签名错而拒绝——它会正常受理,然后返回"不一致"。
于是你会以为核验失败是数据问题,实际上是参数没传对。 联调期排查这类问题要花半天。
所以联调第一件事:打印完整请求参数,逐字核对 idcard 和 bankPreMobile 两个参数名与值。参数名是 bankPreMobile(银行预留手机号),不是 mobile、不是 phone。
三、逐档接口与字段
三档是三个独立端点,按需调用:
POST /v3/card2-server 二要素:卡号 + 姓名
POST /v3/card3-server 三要素:+ 身份证号 POST /v3/card4-server 四要素:+ 银行预留手机号
必填公共字段:mall_id(商户ID)、tm(13 位毫秒时间戳)、sign(MD5 签名)。
请求示例(四要素):
mall_id=100001
realname=张三 cardnum=6222021234567890123 idcard=110101199001011234 bankPreMobile=13800138000 tm=1700000000000 sign=xxxxxxxxxxxxx
响应核心字段:
{
"data": { "code": "1000", "message": "一致", "card_type": "借记卡", "bank_name": "中国工商银行" }, "status": "2001" }
注意 card_type 和 bank_name 是附赠的——卡 BIN 解析出来的卡种与发卡行。这两个字段在支付路由、代发渠道选择、风控规则里都很有用,做一次核验顺便就把卡信息拿到了,不必再单独调卡 BIN 查询接口。
四、结果不对,该信谁
银行卡核验的结果口径比身份证核验更"硬"——因为数据来自银行/银联侧,不是靠姓名与证件号的比对规则。
"不一致"时按这个顺序排查:
四要素失败时不要自动降级到三要素放行——这是风控红线。降级等于把"验证手机绑定"这一层直接拆掉,攻击者拿到身份信息就能过。降级只能由业务侧在有额外风控证据(如设备指纹、历史行为)时明确决定。
五、合规与安全:卡号比身份证号更要小心
银行卡号属于敏感个人信息,处理要求比一般个人信息严格:
log.info(request) 就把全卡号写进日志文件了;数据留存的完整框架见核验数据留存的合规实践。
六、上线检查单
□ 选对档位:绑卡/快捷支付=四要素,提现/退款=二要素
□ 参数名核对:bankPreMobile(不是 mobile/phone) □ 签名只算 5 字段:mall_id+realname+cardnum+tm+appkey □ 字段格式:tm 为 13 位毫秒时间戳,非秒 □ 卡号掩码:业务库前6后4,日志全覆盖 □ 失败引导:区分"手机号非预留"与"卡号有误",给用户可操作提示 □ 不自动降级:四要素失败不得回落三要素放行 □ 计费边界:明确"不一致"是否计费(通常计费,因上游已查询) □ 对账:批次结束核对调用量与账单
相关阅读
四要素核验的具体计费口径与并发配额随业务场景而定,开通时与商务确认;联调期有 100 次免费额度覆盖正常路径与异常路径的验证。