通过银行卡号解析银行名称和卡别

bankcard

前几天在支付宝添加银行卡的时候注意到输完卡号支付宝就自动识别了银行名称,所以用Firefox自带的工具看了一下实现方式,发现支付宝有一个 API 来做这个事情,只要依据固定的格式发送HTTP请求就可以获得JSON格式的结果,除了对应的银行名称代码之外,还有银行卡的类型(储蓄卡/信用卡)。

各种银行卡

把以下URL中的银行卡卡号替换成需要查询的真实卡号即可。

https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=银行卡卡号&cardBinCheck=true

下面是一个农业银行的例子,当然卡号是假的,只是头6位是农行的BIN码而已。支付宝的这个API并没有使用LUHN算法来验证银行卡是否合法。

zhu@tp430:~/Dev/cnbankcard$ http "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=6228430120000000000&cardBinCheck=true"
HTTP/1.1 200 OK
Connection: keep-alive
Content-Language: zh-CN
Content-Length: 101
Content-Type: application/json;charset=GBK
Date: Sun, 08 Mar 2015 15:21:17 GMT
Server: spanner/1.0.6
Set-Cookie: JSESSIONID=CCDE8AA9E2DAEC082A7614734AF729FB; Path=/; HttpOnly
Set-Cookie: JSESSIONID=CCDE8AA9E2DAEC082A7614734AF729FB; Path=; Secure; HttpOnly
Set-Cookie: spanner=dauWw2JHEhbWoKV/zrMf2LLFCxFf8h1G;path=/;secure;
Strict-Transport-Security: max-age=31536000
 
{
    "bank": "ABC", 
    "cardType": "DC", 
    "key": "6228430120000000000", 
    "messages": [], 
    "stat": "ok", 
    "validated": true
}

因为JSON数据里的银行名称是英文代码,所以写了一个 Python 脚本支付宝的合作银行页面自动获取英文代码对应的中文银行名。

此外,银行的LOGO也可以用过支付宝提供的一个图片API获取。

以上详情我都记录在cnbankcard这个Github Repo里。

其实背后的原理也很简单。一般来说,通过银行卡卡号的前6位BIN码可以得出该银行卡的发卡行,所以只要有一个事先准备好的字典,就能写一个简单的程序来通过银行卡卡号识别银行名称。网上有一些提供银行卡查询的网站,甚至能识别到归属地,部分还提供了收费API。不过既然支付宝有这种不公开的开放API,就不必去花钱了。


转载:http://www.digglife.net/articles/cnbankcard.html

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信对账单接口返回的文件是以 CSV 格式的文本文件,可以使用文本编辑器或 Excel 等软件打开。文件开头的前两行是标题和日期范围,后面的每一行是一笔交易的详细信息。每列的含义如下: 1. 交易时间:格式为 yyyy-MM-dd HH:mm:ss,表示该笔交易的发生时间; 2. 公众账号ID:即微信支付分配的公众账号ID(企业号corpid即为此appId); 3. 商户号:即微信支付分配的商户号; 4. 子商户号:受理模式下,返回子商户号,否则返回空; 5. 设备号:微信支付分配的终端设备号; 6. 微信订单号:微信支付订单号; 7. 商户订单号:商户系统内部的订单号; 8. 用户标识:用户在商户appid下的唯一标识; 9. 交易类型:JSAPI、NATIVE、APP等; 10. 交易状态:SUCCESS、REFUND、NOTPAY、CLOSED等; 11. 付款银行银行类型,采用字符串类型的银行标识; 12. 货币种类:货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY; 13. 总金额:订单总金额,单位为分; 14. 企业红包金额:企业红包金额,单位为分; 15. 商品名称:商品名称; 16. 商户数据包:商户数据包,原样返回; 17. 手续费:手续费,单位为分; 18. 费率:费率,数字格式,例如:0.6%表示为0.006; 19. 回退金额:当退款申请发生创建时,返回总退款金额,单位为分; 20. 商户退款单号:商户退款单号; 21. 退款金额:退款金额,单位为分; 22. 企业红包退款金额:企业红包退款金额,单位为分; 23. 退款类型:ORIGINAL—原路退款 BALANCE—退回到余额 OTHER_BALANCE—原账户异常退到其他余额账户 OTHER_BANKCARD—原银行异常退到其他银行; 24. 退款状态:退款成功、退款失败等; 25. 商品编码:商户定义的商品编码; 26. 商户门店编号:商户门店编号; 27. 交易单号:微信支付交易单号; 28. 退款单号:微信支付退款单号; 29. 商家数据包:商家数据包,原样返回; 30. 手续费率:手续费率,数字格式,例如:0.6%表示为0.006; 31. 订单金额(元):订单金额,单位为元; 32. 申请退款金额(元):申请退款金额,单位为元; 33. 退款金额(元):退款金额,单位为元; 34. 申请退款笔数:申请退款的笔数; 35. 退款成功笔数:退款成功的笔数; 36. 退款失败笔数:退款失败的笔数。 需要注意的是,微信支付接口返回的 CSV 文件编码格式为 GBK,需要进行转码才能正确显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值