老王仓库管货和卡bin服务设计

上篇支付话题【老王开店和支付路由管理】聊到“九层之台,起于垒土”,如果路由是机制,是台子的话;最小的垒土就是我们的卡bin,每一张银行卡都有一个卡号,每个卡号都包含着发卡行标示代码(BIN号),也就是我们俗称的卡BIN。
卡BIN是什么?市面上有哪些卡BIN?卡BIN有什么用?怎么设计服务?
周末,我们一起聊聊的卡BIN服务设计,我们还是从隔壁老王开店的故事讲起。
老王开了个杂货店,随着生意越来越大,合作的供应商也越来越多了,商品种类也越来越丰富,进的货已经多到需要老王特地租个仓库去放货。
租下来老王开始按块划分区域进行放货,为了后面好类举,我们假设老王的货物都是食品类,只卖方便面。
老王根据方便面的牌子不同,比如康师傅、统一等各自放了一个区域。
老王记下来康师傅有谁可以来供货【老甲、小郑】,统一可以有谁来供货。
每个牌子又根据种类不同再各自归置,比如统一老坛酸菜面、统一红烧牛肉面、统一卤肉面;康师傅老坛酸菜面、康师傅红烧牛肉面。
每次缺货的时候,老王就是看看缺的是哪个牌子,找供应商再去定具体的品种补货。如图A,,老王的仓库索引图

一开始还都挺好,康师傅没了找老甲、小郑供货,统一没了找李三,赵四。反正谁便宜找谁。
慢慢时间长了,老王就遇到了点小问题。打电话要货时,缺红烧牛肉面给李三没有红烧只有酸菜;要酸菜面找赵四时,赵四没有酸菜有红烧,老王一开始没区分供应商具体有哪几个品种,只知道统一供应商是李三、赵四、钱五;康师傅是孙六、张七,这样一来一回时间耽误了,有时候还把事情耽误了。
后来老王根据发生的问题和自身供应商多,流水大要比价进货的情况,重新设置了仓库流程。
老王根据方便面的牌子不同,比如康师傅、统一等各自放了一个区域。
每个牌子又根据种类不同再各自归置,比如统一老坛酸菜面、统一红烧牛肉面、统一卤肉面;康师傅老坛酸菜面、康师傅红烧牛肉面。
老王记下来康师傅酸菜面有谁可以来供货【老甲、小郑】、红烧牛肉面有谁可以来供应【李三、孙六】。
这么一改,每次缺货的时候,老王补货的流程变成了先去看缺的是哪个牌子,什么种类商品,再看有哪些供应商可以支持,根据成本,送货速度等综合条件决定找谁进,如图B,老王新的仓库索引图。

自此,老王的苦恼再也没发生过了,老王再也不用担心缺货不知道找谁了。
故事讲完了,在老王的管理仓库的过程,也是我们管理卡BIN,设计卡BIN库结构的一个过程,通过卡bin服务去判定通道支持能力,提高支付成功率。
我们从头开始说起,先说说卡BIN的一些基础知识,。
一、卡BIN是什么
卡BIN是发卡行识别码(Bank Identification Number, 缩写为BIN ),又叫发卡机构标识代码Issuer Identification Numbers(IIN)。一般由6位数字组成,2014年年底,国际标准组织(ISO)已经将BIN由6位数字调整到8位数字。目前就国内银行卡来说绝大部分卡BIN是六位
二、卡BIN如何产生
卡BIN由国际标准化组织(ISO)【是全球性非政府组织,负责绝大部分领域标准化活动】分配给各从事跨行转接交换的银行卡组织,再由卡组织分配给各组织内银行。
卡BIN第一位,为发卡行业标识号Major Industry Identifier(MII),代表的是发卡机构所处行业。具体情况如下:

目前我们常见到的卡组织有银联、万事达(Mastercard)、维萨(VISA)、美国运通(AE)、日本国际信用卡(JCB)、大莱卡(Diners Card),他们各自的卡BIN情况如下。

拿如图的银联招商银行借记卡来说,银联的卡BIN是62开头,由ISO分配,招商银行向银联申请卡BIN,银联分配621485作为招商银行借记卡。为了方便了解,举个例子,卡组织就像食品,信用卡借记卡就像食品、招商银行就像厂商比如康师傅,发卡行卡Bin段就像对应的旗下产品比如红烧牛肉面或者老坛酸菜面,后面的卡位数定义了这个产品的最大产量和标准格式,下文提到的通道方相当于供应商张三、李四。
所以每一张银行的诞生,标准流程是发卡行需要向对应卡组织申请对应卡BIN,而卡组织的BIN码由ISO分配。发卡行拿到对应BIN码后再去生成卡号,发给持卡人。

三、卡BIN方案设计
设计卡BIN方案和契约字段有两种方案,一种和通道方无关,另外一种和通道方有关。
第一种方案表结构如下
表结构一

在第一种方案中是比较纯粹的卡bin结构,只和卡本身信息有关,不关联通道,比较适合背后接的通道提供方为单一提供方和无路由服务的系统架构中。(路由服务介绍参照老王开店和支付路由管理文章)。
还是拿老王开的仓库来举例,在只有一个供应商的情况下,老王发生缺货的时候,供应商反正就是一家,通过商品上面的信息直接就知道找谁进货,没有他选,有货没货结果都一样;
而路由服务的建立最显著的表现是会存在多个通道进行选择,输出最优通道;通道之间也有主备选择,那么通道在没有路由的情况下或者每个银行只有一个通道时,用户输入银行的卡bin,进行卡bin校验时,由于只有一个通道,也就是失败就是失败,成功就是成功,即使知道这个卡bin不在库里面或者这个通道不支持,也没有选择,因为这时候通道和商户银行配置是一对一关系。
以上场景里面第一种方案结构是可行的,缺点是多个通道时会由于某通道支持招商银行信用卡,但是不支持招商银行信用卡携程联名卡卡bin而引起支付失败。
就像老王进货一样,一通电话打下来没有这个品种的商品,影响生意。

所以就有了如下第二种表结构,引入了通道方。这样在有多个通道时,用户输入卡BIN,会去判断能够支持这个卡bin段的通道有哪些,再根据路由系统自身策略【见老王开店和支付路由管理】,进行比如成本优先,短路优先等规则输出一个最优通道,从而避免因为卡BIN问题而造成的失败。
缺点是维护起来麻烦,同样的卡bin在多个通道上需要维护多次。
表结构二

如同老王后来改进的方法一样,先看支持这个商品品种的供应商有哪些,再在支持的里面找个合适的供应商

四、卡BIN LUNH算法
在我们进行一张银行卡验证或者需要自己伪造银行卡进行测试时,就需要了解一张卡BIN的算法是怎么样,俗称LUNH算法,大家可以拿着自己的银行卡出来一起计算看看是否符合以下算法。
PS:银行卡验证LUNH算法
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如上面提到的招行借记卡,卡号是:6214851216547385
则逆向奇数位求和
5+3+4+6+2+5+4+2=31
逆向偶数位规则
8*2=16-9=7
7*2=14-9=5
5*2=10-9=1
1*2=2
1*2=2
8*2=16-9=7
1*2=2
6*2=12-9=3
7+5+1+2+2+7+2+3=29
最后31+29=60 可以被10整除,认定校验通过。
路由管理参见【老王开店和支付路由管理】
谢谢你,来这里!