一种银行卡号自选方法及装置的制造方法
【专利摘要】本发明提供一种银行卡号自选方法及装置,其中,该方法包括:确定用户自选位的数值;根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号;将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。采用本发明方法可以实现用户对银行卡号的自主选择,满足用户的个性化需求。
【专利说明】
一种银行卡号自选方法及装置
技术领域
[0001]本发明涉及号码选择技术领域,特别涉及一种银行卡号自选方法及装置。
【背景技术】
[0002]在平常生活中,对号码的选取接触的最多的就是手机号码的选取,其选号方式是:各个号码销售点将能够提供的手机号码全部罗列出来,顾客在所提供的号码中选择自己喜欢的号码,例如有几个连续相同的数字的号码、在号码中8和6出现较多的号码等等,这种号码出售方式较以往的只负责提供一个能够使用的号码的方式提高了灵活性,满足顾客的个性化需求。
[0003]而对于银行而言,一般是用户填写好资料,申请银行卡的时候,银行会自动分配给用户一个号码。银行卡号主要由发卡机构标识代码(BIN)、发卡机构自定义位和校验位共三部分组成。其中,发卡机构标识代码(BIN)为前6位数字,校验位为卡号最后I位,中间位数为发卡机构自定义位,发卡机构自定义位可以包括发卡地区码和卡序号,如图1所示,也可以不包括发卡地区码,只包括卡序号,如图2所示。现有的银行卡号都是银行自主分配给用户的,用户没有自主选择权,这样不能满足用户的个性化需求。
【发明内容】
[0004]本发明实施例提供了一种银行卡号自选方法,可以满足用户的个性化需求。该方法包括:
[0005]确定用户自选位的数值;
[0006]根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之前;
[0007]将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号;
[0008]将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。
[0009]在一个实施例中,所述根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值,包括:
[0010]根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值。
[0011 ]在一个实施例中,所述根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值,具体包括:
[0012]当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值;
[0013]当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前η-1位的数值,根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值,其中,η大于等于2,n为整数。
[0014]在一个实施例中,所述当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值,具体包括:
[0015]当一位挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值;所述校验位为用户自选位的最后一位;
[0016]当一位挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值;
[0017]所述奇数位或偶数位按如下方式确定:
[0018]从用户自选位的最后一位开始往前数。
[0019]在一个实施例中,在确定挤兑位前η-1位的数值之前,还包括:
[0020]查询当前序号发生器序号;
[0021]所述按数值由小到大的顺序确定挤兑位前η-1位的数值,具体包括:
[0022]从当前序号发生器序号中相应的挤兑位的数值开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。
[0023]在一个实施例中,所述根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值,具体包括:
[0024]根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法确定挤兑位的数值;
[0025]所述将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号,具体包括:
[0026]将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。
[0027]本发明实施例还提供了一种银行卡号自选装置,可以满足用户的个性化需求。该装置包括:
[0028]自选位数值确定模块,用于用户自选位的数值;
[0029]挤兑位确定模块,用于根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之前;
[0030]自选银行卡号生成模块,用于将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号;
[0031]比对模块,用于将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。
[0032]在一个实施例中,所述挤兑位确定模块具体用于:
[0033]根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值。
[0034]在一个实施例中,所述挤兑位确定模块具体用于:
[0035]当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值;
[0036]当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前n-1位的数值,根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值,其中,η大于等于2,n为整数。
[0037]在一个实施例中,所述挤兑位确定模块具体用于:
[0038]当一位挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值;所述校验位为用户自选位的最后一位;
[0039]当一位挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值;
[0040]所述奇数位或偶数位按如下方式确定:
[0041 ]从用户自选位的最后一位开始往前数。
[0042]在一个实施例中,还包括:
[0043]查询模块,用于查询当前序号发生器序号;
[0044]所述挤兑位确定模块具体用于:
[0045]从当前序号发生器序号中相应的挤兑位的数值开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。
[0046]在一个实施例中,所述挤兑位确定模块具体用于:
[0047]根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法确定挤兑位的数值;
[0048]所述自选银行卡号生成模块具体用于:
[0049]将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。
[0050]在本发明实施例中,用户首先确定自选位的数值,然后根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值,再将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号,最后将自选银行卡号与数据库中已存的银行卡号进行比对,确定该自选银行卡号是否可用,通过本发明方法可以使用户自己选择银行卡号,可以满足用户的个性化需求。
【附图说明】
[0051]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0052]图1是一种银行卡号组成形式示意图;
[0053]图2是另一种银行卡号组成形式示意图;
[0054]图3是一种银行卡号自选方法流程图;
[0055]图4是一种Luhn算法不意图;
[0056]图5是当挤兑位为奇数位时卡号示意图;
[0057]图6是当挤兑位为偶数位时卡号示意图;
[0058]图7是当挤兑位为2位时卡号示意图;
[0059]图8是当挤兑位为3位时卡号示意图;
[0060]图9是一种银行卡号自选装置结构示意图。
【具体实施方式】
[0061]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0062]现有的银行卡号都是由银行自主设置,让后下发给用户的,用户不能自己选择自己喜欢的号码,这样不能满足用户的个性化需求。基于此,在本发明实施例中,提出了一种银行卡号自选方法及装置。
[0063]图3是一种银行卡号自选方法流程图;如图3所示,该方法包括:
[0064]步骤301:确定用户自选位的数值;
[0065]步骤302:根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之
、广.刖;
[0066]步骤303:将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号;
[0067]步骤304:将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。
[0068]具体实施时,用户自选位的位数为卡序号(银行卡号中预设的可自选位)的位数,一般情况下是卡序号位全部由用户自选成喜欢的号码,然后通过计算获得校验位的数值,然后验证用户自选卡号是否可用。但本发明是用户自行设定校验位的数值和部分卡序号位的数值,然后通过计算获得卡序号位中剩余未被用户选择的位的数值,然后验证用户自选卡号是否可用。
[0069]目前国内大部分发行的银行卡的卡号长度为16位或者19位。以国内四大行之一中国银行发行的卡号为例,借记卡长度为19位,主要由6位BIN+4位发卡地区码+8位序号+1位校验位组成;准贷记卡的卡号长度目前是16位,主要由6位BIN+2位发卡地区码+7位序号+1位校验位组成。国内贷记卡的卡号长度目前是16位,主要由6位BIN+9位序号+1位校验位组成。由此可知,银行卡号分两种情况:一种是没有发卡地区码,另一种是有发卡地区码。
[0070]针对第一种情况,在用户确定了自选位的数值之后,需要根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值。针对第二种情况,在用户确定了自选位的数值之后,需要根据用户自选位的数值、发卡机构标识码和发卡地区码,确定挤兑位的数值。其中,挤兑位:当用户自选的位数小于可以自选的位数时,未选择的位数即为挤兑位。如图1所示,用户自选后7位(包括校验位),可自选的为后9位,则挤兑位为倒数第8、9位,即图示的X、Y。校验位:位置位于卡号最后I位数字,如图1所示。其目的并不是用于数字加密,而是为了有效防止偶然的输入性错误。
[0071]在本例中,在确定挤兑位的数值时,本发明采用的是Luhn算法。Luhn算法由IBM的Hans Peter Luhn发明,又称为“模10”算法。它是一种简单的校验和算法,用来验证识别号码,广泛地应用于银行卡号、ΜΕΙ号、社会保险号的合法性验证。首先,从卡号的最后一位数字开始,偶数位乘以2,如果乘积是两位数,则将两个位上的数字相加保存。然后将所有数字相加求和。如果卡号是合法的,则总和能被10整除。下面以19位借记卡号为例,如图4所示,最右边X为fe验位,说明Luhn算法:
[0072]1、从卡号最后一位起,偶数位进行乘2操作,然后和其余位的数字进行累加求和操作;其中乘2操作所得> = 10的,十位数和个位数进行累加求和(即减9进行累加);对于乘2操作所得〈10的,正常累加求和。计算公式如下:
[0073]SUM=X+(8*2-9)+7+(6*2-9)+5+(4*2)+3+(2*2)+l+(0*2)+0+(l*2)+0+(l*2)+6+(6*2-9)+1+(2*2)+6 = Χ+62;
[0074]2、根据Luhn算法,SUM模10为O。即(X+62)mod 10 = 0,所以校验位X = 8。具体实施时,由于用户自选位的位数不定,因此挤兑位的位数也是不定的。挤兑位的位数可以是I位,也可以是η位,其中,η大于等于2,n为整数。在本例中,确定挤兑位的算法如下:
[0075]针对第一种情况(不包括发卡地区码):
[0076]当挤兑位I位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定I位挤兑位的数值。
[0077]当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前η-1位的数值(因为银行卡号都是按照递增序号进行发卡),根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值。
[0078]具体的,当挤兑位2位时,为保证卡号从小到大顺序生成,则先确定挤兑位第一位数值,从0-9依次尝试,挤兑位的第二位则根据用户自选位的数值、发卡机构标识码和挤兑位前I位的数值,利用Luhn算法反演而得。
[0079]当挤兑位3位时,为保证卡号从小到大顺序生成,则先确定挤兑位前两位数值,从00-99依次尝试;挤兑位的第三位则根据用户自选位的数值、发卡机构标识码和挤兑位前2位的数值,利用Luhn算法反演而得。
[0080]挤兑位为4,5,6.._,η位的处理方式以此类推。
[0081 ]针对第二种情况(包括发卡地区码):
[0082]当挤兑位I位时,根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法反演确定I位挤兑位的数值。
[0083]当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前η-1位的数值,根据用户自选位的数值、发卡机构标识码、发卡地区码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值。
[0084]具体的,当挤兑位2位时,为保证卡号从小到大顺序生成,则先确定挤兑位第一位数值,从0-9依次尝试,挤兑位的第二位则根据用户自选位的数值、发卡机构标识码、发卡地区码和挤兑位前I位的数值,利用Luhn算法反演而得。
[0085]当挤兑位3位时,为保证卡号从小到大顺序生成,则先确定挤兑位前两位数值,从00-99依次尝试;挤兑位的第三位则根据用户自选位的数值、发卡机构标识码、发卡地区码和挤兑位前2位的数值,利用Luhn算法反演而得。
[0086]挤兑位为4,5,6-_,11位的处理方式以此类推。
[0087]具体实施时,当挤兑位为I位时,其值直接根据Luhn算法反演而得。Luhn算法验证要求,对于生成的卡号,从最末位开始,每隔一位乘以2,然后累加求和,最后累加校验位后,其结果模10后余数应为O。因为隔位需乘2,所以存在挤兑位是否乘2两种情况,即从卡号最末位(用户自选位的最后一位)开始往前数,确定挤兑位是奇数位还是偶数位。以下进行分别计算说明:
[0088]A.当挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值。或,根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法反演确定奇数位挤兑位的数值。
[0089]为说明方便,以卡号为19位数字(包括发卡地区码)进行说明。如图5所示,对于用户自选尾数为88888888的19位借记卡号,挤兑位对安照Luhn算法,在计算的过程中是没有进行乘2操作;且卡号最后的校验位在Luhn算法验证求和时也不进行乘2操作。因此,我们可以将挤兑位X和校验位的角色互换,按照Luhn算法重新计算,反演出的校验位的值其实就是挤兑位的值。
[0090]挤兑位和校验位角色互换后,按照Luhn算法反演挤兑位过程如下:
[0091]SUM=(8*2-9)+8+(8*2-9)+8+(8*2-9)+8+(8*2-9)+8【校验位】+(0*2)+0+(1*2)+0+(1*2)+6+(6*2-9)+1+(2*2)+6 = 84;
[0092]反演挤兑位=10-(SUM mod 10) = 10-(84mod 10) = 6。即图5所示用户自选尾数为8888888的卡号值为 “6216610100688888888”。
[0093]B.当挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值。或,根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值。
[0094]为说明方便,以卡号为16位数字(不包括发卡地区码)进行说明。如图6所示,对于用户自选尾数为123456789的9位借记卡号,按照Luhn算法,在计算的过程中挤兑位X需进行乘2操作,而卡号最后的校验位在Luhn算法验证求和时进行乘2操作。因此,我们将挤兑位X和校验位的角色互换计算后需进行除2逆向计算,反演出挤兑位的值。计算过程如下:
[0095]SUM=(8*2-9)+7+(6*2-9)+5+(4*2)+3+(2*2)+l+9【校验位】+6+(6*2-9)+6+(9*2-9)+0+(4*2)=79;
[0096]10-(SUM mod 10) = 10_(79mod 10) = I,反演挤兑位=(1+9)/2 = 5。
[0097]举例说明当挤兑位2位时,挤兑位的确定算法。
[0098]为保证卡号从小到大顺序生成,先确定挤兑位第一位数值,从0-9依次尝试,第二位则根据Luhn算法反演而得。如图7所示,由于X的取值为O至9共10种情况,因此按照Luhn算法符合用户自选7位尾数的卡号理论上存在10个(不考虑重复发号)。当X的值固定后,则计算挤兑位Y时,算法反演过程同“挤兑位长度为I位数”。
[0099]按照Luhn算法反演计算符合条件的10个银行卡号分别为:
[0100]6216610100068888888
[0101]6216610100118888888
[0102]6216610100258888888
[0103]6216610100308888888
[0104]6216610100498888888
[0105]6216610100548888888
[0106]6216610100688888888
[0107]6216610100738888888
[0108]6216610100878888888
[0109]6216610100928888888
[0110]具体实施时,银行卡号都是按照递增序号进行发卡的,因此银行会通过序号发生器进行计数,记录银行卡号发放到哪一个数值。在本例中,在确定挤兑位前η-1位的数值之前,还包括:
[0111]查询当前序号发生器序号;
[0112]从当前序号发生器序号中相应的挤兑位的数值开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。
[0113]具体的,以卡号为19位数字(包括发卡地区码)进行说明。当前序号发生器序号为6216610100065555555。当自选号中挤兑位为两位时,如图7所示,其中06为当前序号发生器序号中的挤兑位,若用户自选号的后几位为8888888,则自选号的挤兑位X的数值可以从O开始,挤兑位Y利用Luhn算法反演得到。当自选号中挤兑位为三位时,如图8所示,其中065为当前序号发生器序号中的挤兑位,若用户自选号的后几位为888888,则自选号的挤兑位XY的数值可以从06开始,挤兑位Z利用Luhn算法反演得到。
[0114]具体实施时,在确定了挤兑位的数值之后,针对第一种情况(不包括发卡地区码):将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号。针对第二种情况(包括发卡地区码):将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。
[0115]在生成了自选银行卡号后,需要将自选银行卡号和数据库中已存的卡号进行比对查询,如果自选银行卡号和数据库中已存的银行号码相同,表示该号码已发行,则跳过该号码,防止卡号重复发行,让用户重新确定自选位的数值;或者,请用户确认识否同意银行自主修改一位或者几位自选位的数值,若用户同意,银行通过上述步骤生成修改一位或者几位自选位的几个银行卡号,并且生成的几个银行卡号是可用的,请用户选择其中一个。当生成的自选银行卡号与数据库中已存的银行号码不同,表示该号码未发行,确定生成的自选银行卡号可用。
[0116]基于同一发明构思,本发明实施例中还提供了一种银行卡号自选装置,如下面的实施例所述。由于银行卡号自选装置解决问题的原理与银行卡号自选方法相似,因此银行卡号自选装置的实施可以参见银行卡号自选方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0117]图9是一种银行卡号自选装置结构示意图,如图9所示,该装置包括:
[0?18]自选位数值确定模块901,用于用户自选位的数值;
[0119]挤兑位确定模块902,用于根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之前;
[0120]自选银行卡号生成模块903,用于将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号;
[0121]比对模块904,用于将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。
[0122]具体实施时,挤兑位确定模块902具体用于:
[0123]根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值。
[0124]具体实施时,挤兑位确定模块902具体用于:
[0125]当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值;
[0126]当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前η-1位的数值,根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值,其中,η大于等于2,n为整数。
[0127]具体实施时,挤兑位确定模块902具体用于:
[0128]当一位挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值;所述校验位为用户自选位的最后一位;
[0129]当一位挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值。
[0130]具体实施时,还包括:
[0131]查询模块905,用于查询当前序号发生器序号;
[0132]挤兑位确定模块902具体用于:
[0133]从当前序号发生器序号中相应的挤兑位的数值加I开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。
[0134]具体实施时,挤兑位确定模块902具体用于:
[0135]根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法确定挤兑位的数值;
[0136]自选银行卡号生成模块903具体用于:
[0137]将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。
[0138]综上所述,本发明提出的银行卡号自选方法及装置具有如下优点:
[0139]1、本发明能够有效的解决卡号自选功能,同时生成的卡号满足LUHN算法校验位规则;
[0140]2、本发明挤兑位的顺序选择可使生成的卡号满足升序或降序规则;
[0141]3、本发明通过与序号发生器当前序号比对,能够快速高效的生成满足LUHN算法规则的卡号;再通过生成的卡号与数据库的卡号进行比对查询,排除重复数据,防止重复发卡。
[0142]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0143]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0144]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0145]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0146]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种银行卡号自选方法,其特征在于,包括: 确定用户自选位的数值; 根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之前; 将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号; 将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。2.如权利要求1所述的银行卡号自选方法,其特征在于,所述根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值,包括: 根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值。3.如权利要求2所述的银行卡号自选方法,其特征在于,所述根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值,具体包括: 当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值; 当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前n-1位的数值,根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值,其中,η大于等于2,n为整数。4.如权利要求3所述的银行卡号自选方法,其特征在于,所述当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值,具体包括: 当一位挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值;所述校验位为用户自选位的最后一位; 当一位挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值; 所述奇数位或偶数位按如下方式确定: 从用户自选位的最后一位开始往前数。5.如权利要求3所述的银行卡号自选方法,其特征在于,在确定挤兑位前η-1位的数值之前,还包括: 查询当前序号发生器序号; 所述按数值由小到大的顺序确定挤兑位前n-1位的数值,具体包括: 从当前序号发生器序号中相应的挤兑位的数值开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。6.如权利要求2所述的银行卡号自选方法,其特征在于,所述根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值,具体包括: 根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法确定挤兑位的数值; 所述将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号,具体包括: 将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。7.一种银行卡号自选装置,其特征在于,包括: 自选位数值确定模块,用于用户自选位的数值; 挤兑位确定模块,用于根据用户自选位的数值和发卡机构标识码,确定挤兑位的数值;在银行卡号中预设的可自选位中去除用户自选位后剩余的为挤兑位,挤兑位位于用户自选位之前; 自选银行卡号生成模块,用于将挤兑位的数值、用户自选位的数值和发卡机构标识码组合生成自选银行卡号; 比对模块,用于将生成的自选银行卡号与数据库中已存的银行卡号进行比对,若生成的自选银行卡号与数据库中已存的银行号码相同,则重新确定用户自选位的数值,若生成的自选银行卡号与数据库中已存的银行号码不同,则确定生成的自选银行卡号可用。8.如权利要求7所述的银行卡号自选装置,其特征在于,所述挤兑位确定模块具体用于: 根据用户自选位的数值和发卡机构标识码,利用Luhn算法确定挤兑位的数值。9.如权利要求8所述的银行卡号自选装置,其特征在于,所述挤兑位确定模块具体用于: 当挤兑位的位数为一位时,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定一位挤兑位的数值; 当挤兑位的位数为η位时,按数值由小到大的顺序确定挤兑位前n-1位的数值,根据用户自选位的数值、发卡机构标识码和挤兑位前η-1位的数值,利用Luhn算法反演确定挤兑位第η位的数值,其中,η大于等于2,n为整数。10.如权利要求9所述的银行卡号自选装置,其特征在于,所述挤兑位确定模块具体用于: 当一位挤兑位为奇数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演确定奇数位挤兑位的数值;所述校验位为用户自选位的最后一位; 当一位挤兑位为偶数位时,将挤兑位的数值和校验位的数值交换,根据用户自选位的数值和发卡机构标识码,利用Luhn算法反演后再进行除2逆向计算,确定偶数位挤兑位的数值; 所述奇数位或偶数位按如下方式确定: 从用户自选位的最后一位开始往前数。11.如权利要求9所述的银行卡号自选装置,其特征在于,还包括: 查询模块,用于查询当前序号发生器序号; 所述挤兑位确定模块具体用于: 从当前序号发生器序号中相应的挤兑位的数值开始,按数值由小到大的顺序确定挤兑位前η-1位的数值。12.如权利要求8所述的银行卡号自选装置,其特征在于,所述挤兑位确定模块具体用于: 根据用户自选位的数值、发卡机构标识码和发卡地区码,利用Luhn算法确定挤兑位的数值; 所述自选银行卡号生成模块具体用于: 将挤兑位的数值、用户自选位的数值、发卡机构标识码和发卡地区码组合生成自选银行卡号。
【文档编号】G06Q40/02GK105956921SQ201610349091
【公开日】2016年9月21日
【申请日】2016年5月24日
【发明人】冯春阳, 杨厚德, 靳佳, 戴雪梅, 许海洋
【申请人】中国银行股份有限公司