15位身份证号码漂白和反向漂白方法

xiaoxiao2020-10-23  20

15位身份证号码漂白和反向漂白方法
【技术领域】
[0001]本发明涉及数据处理技术领域,尤其涉及一种15位身份证号码漂白和反向漂白方法。
【背景技术】
[0002]数据漂白是使数据更加安全的一种计算机处理过程,它与数据加密不同,数据加密后是无法正常读取和使用的,必须解密才能使用。而数据漂白是将数据通过一定的算法变成另一种样式,而这种样式是可读的,并且与原数据是同一类的。数据漂白根据漂白的具体需求,根据不同的漂白字段,制定不同的漂白算法,以保证漂白后的数据具有高仿真度,高仿真度是区分数据漂白算法与普通加密算法的重要标志,漂白是一种特殊的加密过程,经过漂白处理后的数据必须要能够保证具备可读性、逻辑关联性和安全性,并且能够通过反向漂白还原成原数据。
[0003]数据漂白分为正向漂白和反向漂白。正向漂白是将原始数据经过漂白处理形成漂白后数据的过程。反向漂白是将漂白后的数据经过反向处理还原成原始数据的过程。随着大数据技术的成熟和发展,大数据在商业上的应用越来越广泛,有关大数据的交互、整合、交换、交易的例子也日益增多,必须保障数据中涉及客户和生产的敏感信息不外泄,这些信息包括客户姓名、电话、住址、身份证号码等个人敏感信息,以及柜员类和企业类的敏感信息等。数据漂白常用于由于需要在非生产环境中使用生产数据的场景,例如测试、开发、培训、外包、数据挖掘和研宄等,通过数据漂白过程,能够减少数据使用的限制,保障数据中涉及客户和生产的敏感信息不外泄,不侵害用户的个人隐私数据,且具有高仿真度。
[0004]根据国家标准中有关公民身份号码的规定,公民身份号码是特征组合码,15位身份证号码的十五位数字排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码和三位数字顺序码。
[0005]地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。如广东省深圳市宝安区的行政区划代码为440306。
[0006]生日期码(身份证第七位到第十二位)表示编码对象出生的年、月、日,其中年份用两位数字表示。例如:1980年02月15日用800215表示。
[0007]顺序码(身份证第十三位到十五位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十五位奇数分给男性,偶数分给女性。
[0008]虽然2013年开始15位身份证号码的第一代居民身份证已经废止,但是在废止日期之前已经存储的身份证号码数据中,仍有相当一部分身份证号码的数据格式是15位,因此需要针对15位身份证号码设计一种15位身份证号码漂白和反向漂白方法。

【发明内容】

[0009]本发明的目的在于提供一种15位身份证号码漂白方法,对15位身份证号码进行漂白,保持数据高仿真度、漂白过程不易被破解。
[0010]本发明的另一目的在于提供一种15位身份证号码反向漂白方法,将漂白后的15位身份证号码还原成原始15位身份证号码。
[0011]为实现上述目的,本发明提供一种15位身份证号码漂白方法,包括:
[0012]步骤100、收集所有的行政区划代码数据,初始化AddrCodeGroups个列表codeList以用于存储行政区划代码;
[0013]步骤110、按一定的方式计算行政区划代码X的哈希值hashCode ;
[0014]步骤120、计算行政区划代码X对应的列表序号group Index: group Index =mod(hashCode,AddrCodeGroups);
[0015]步骤130、将行政区划代码X存入grouplndex对应的列表中;
[0016]步骤140、输入待漂白身份证号码,按前述方式计算待漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex ;
[0017]步骤150、计算X在grouplndex对应的列表codeList的位置codeInd ;取codeList中mod(codelnd+CodeShift,len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为预设的偏移量;
[0018]步骤160、根据哈希值hashCode按一定的方法计算顺序码的偏移量orderCodeShift ;新顺序码 newOrderCode = mod (orderCode+orderCodeShift, 1000),其中orderCode为旧顺序码;
[0019]步骤170、根据新顺序码newOrderCode按一定的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod(YY+YYShift,100),其中YY为旧年份编码;
[0020]步骤180、根据新年份编码newYY按一定的方法计算月份编码的偏移量MMShift ;新月份编码newMM = (MM+MMShift,12),其中丽为旧月份编码;
[0021]步骤190、根据新月份编码newMM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod(DD+DDShift,maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出漂白后的身份证号码。
[0022]其中,计算行政区划代码X的哈希值hashCode的方法仅以x为变量。
[0023]其中,行政区划代码X的哈希值hashCode为x的六位数字之和。
[0024]其中,orderCodeShift= grouplndexX 13-17。
[0025]其中,YYShift= mod (newOrderCode, 13) X 2 - 13。
[0026]其中,MMShift= mod(newYY,11) _6。
[0027]其中,DDShift= newMM - 5。
[0028]为实现上述目的,本发明还提供了一种15位身份证号码反向漂白方法,包括:
[0029]步骤200、收集所有的行政区划代码数据,初始化与漂白时数量相同的AddrCodeGroups个列表codeList以用于存储行政区划代码;
[0030]步骤210、按与漂白时相同的方式计算行政区划代码X的哈希值hashCode ;
[0031]步骤220、计算行政区划代码X对应的列表序号grouplndex:grouplndex =mod(hashCode,AddrCodeGroups);
[0032]步骤230、将行政区划代码X存入grouplndex对应的列表中;
[0033]步骤240、输入待反向漂白身份证号码,按前述方式计算待反向漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex ;
[0034]步骤250、计算X在grouplndex对应的列表codeList的位置codeInd ;取codeList中mod(codelnd - CodeShift,len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为漂白时使用的偏移量;
[0035]步骤260、根据哈希值hashCode按漂白时的方法计算顺序码的偏移量orderCodeShift ;新顺序码 newOrderCode = mod (orderCode - orderCodeShift, 1000),其中orderCode为旧顺序码;
[0036]步骤270、根据旧顺序码OrderCode按漂白时的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod(YY - YYShift, 100),其中YY为旧年份编码;
[0037]步骤280、根据I日年份编码YY按漂白时的方法计算月份编码的偏移量丽Shift ;新月份编码newMM = (MM -丽Shift,12),其中丽为旧月份编码;
[0038]步骤290、根据旧月份编码MM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod(DD - DDShift, maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出反向漂白后的身份证号码。
[0039]其中,计算行政区划代码X的哈希值hashCode的方法仅以x为变量。
[0040]其中,行政区划代码X的哈希值hashCode为x的六位数字之和。
[0041]综上所述,本发明的15位身份证号码漂白方法能够对15位身份证号码进行漂白,保持数据高仿真度、漂白过程不易被破解,适合于漂白大规模数据;本发明的15位身份证号码反向漂白方法,能够将漂白后的15位身份证号码还原成原始15位身份证号码。
【附图说明】
[0042]图1为本发明15位身份证号码漂白方法的流程图。
【具体实施方式】
[0043]下面结合附图,通过对本发明的【具体实施方式】详细描述,将使本发明的技术方案及其有益效果显而易见。
[0044]参见图1,其为本发明15位身份证号码漂白方法的流程图。漂白方法主要包括:
[0045]步骤100、收集所有的行政区划代码数据,初始化AddrCodeGroups个列表codeList,用于存储行政区划代码。
[0046]收集所有的行政区划代码数据并分组,分组数量AddrCodeGroups事先确定,比如为20。
[0047]步骤110、按一定的方 式计算行政区划代码X的哈希值hashCode。
[0048]对行政区划代码X,按一定的方式计算出一个哈希值hashCode,计算方法不依赖x以外的其他变量。一个可行的哈希值计算方法为X的六位数字之和,如“440306”的哈希值为 4+4+0+3+0+6 =17。
[0049]步骤120、计算行政区划代码X对应的列表序号grouplndex: group Index =mod(hashCode,AddrCodeGroups)。
[0050]哈希值hashCode对分组数AddrCodeGroups取模,模数为其对应的组数:grouplndex = hashCode % AddrCodeGroups。如 “440306” 的组数为 17% 20 = 17。
[0051]步骤130、将行政区划代码X存入grouplndex对应的列表中。
[0052]通过上述步骤准备行政区划代码数据,接下来进行身份证号码漂白过程。
[0053]步骤140、输入待漂白身份证号码,按前述方式计算待漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex。
[0054]取身份证号码的前6位行政区划代码X,计算其哈希值hashCode (计算方法需与上面行政区划代码数据整理过程中的计算方法相同),并计算其对应的组数:groupIndex =hashCode % AddrCodeGroups。
[0055]步骤150、计算X在grouplndex对应的列表codeList的位置codelnd ;取codeList中mod(codelnd+CodeShift,len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为预设的偏移量。
[0056]计算新的行政区划代码(1-6位)。取得grouplndex对应的行政区划代码列表codeList,计算x在codeList的位置codelnd。设置一确定的偏移量CodeShift,如CodeShift = 17。取codeList中codelnd+CodeShift位置上的行政区划代码作为新的行政区划代码,如果codelnd+CodeShift大于或等于codeList的长度(Ien),则取codelnd+CodeShift-len位置上的代码,即从头开始循环计数。
[0057]步骤160、根据哈希值hashCode按一定的方法计算顺序码的偏移量orderCodeShift ;新顺序码 newOrderCode = mod (orderCode+orderCodeShift, 1000),其中orderCode为旧顺序码。
[0058]计算新的顺序码(13-15位)。根据行政区划代码的哈希值按一定的方法计算顺序码的偏移量,例如为grouplndexX 13-17 ;新的顺序码newOrderCode为旧顺序码orderCode加上此偏移量。如 newOrderCode = orderCode+groupIndexX 13-17。如果新顺序码newOrderCode小于0,则newOrderCode需加上1000,否则如果大于或等于1000,则需减去
1000ο
[0059]步骤170、根据新顺序码newOrderCode按一定的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod (YY+YYShift, 100),其中YY为旧年份编码。
[0060]计算新的年份编码(7-8位)。根据新顺序码newOrderCode按一定的方法计算年份编码的偏移量,如为(newOrderCode% 13) X2 - 13 ;新的年份编码newYY为旧编码YY加上此偏移量。如 newYY = YY+ (newOrderCode % 13) X 2 - 13。如果 newYY 小于 0,则 newYY需加上100,否则如果大于或等于100,newYY,则需减去100。
[0061]步骤180、根据新年份编码newYY按一定的方法计算月份编码的偏移量MMShift ;新月份编码newMM = (MM+MMShift,12),其中丽为旧月份编码。
[0062]计算新的月份编码(9-10位)。根据新年份编码newYY按一定的方法计算月份编码的偏移量,如为newYY% 11-6 ;新的月份编码newMM为旧月份编码MM加上此偏移量,如:newMM = MM+newYY% 11-6 ;如果newMM小于1,则需加上12,否则如果大于12,则需减去12。
[0063]步骤190、根据新月份编码newMM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod (DD+DDShift, maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出漂白后的身份证号码。
[0064]计算新的日期编码(11-12位)。根据新月份编码newMM按一定的方法计算日期编码的偏移量,如为newMM-5 ;新的日期编码newDD为旧日期编码DD加上此偏移量,如:newDD=DD+newMM-5 ;计算新月份newMM对应的月中最大的天数maxDay (如I月最大天数为31,2月闰年最大天数为29,其他年份为28等,其中newYY% 4等于O时为闰年),如果newDD小于1,则需加上maxDay,否则如果大于maxDay,则需减去maxDay。新的15位身份证号码计算完毕并输出。
[0065]本发明的漂白方法对于固定的输入漂白后的输出是确定的,但计算过程中各个编码的改变有较强的随机性,结果有高仿真度且不易被反向破解。漂白后的输出数据具有可用性及易用性,用户可以通过选择需要的函数和参数来定制漂白的过程;而且由于本发明对于固定的输入漂白后的输出是确定的,可以根据需要任意拆分输入数据进行并行处理,适合于漂白大规模数据。
[0066]本发明还提供了相应的反向漂白方法,主要包括:
[0067]步骤200、收集所有的行政区划代码数据,初始化与漂白时数量相同的AddrCodeGroups个列表codeList,用于存储行政区划代码。
[0068]收集所有的行政区划代码数据并分组,分组数量AddrCodeGroups事先确定,比如为20。
[0069]步骤210、按与漂白时相同的方式计算行政区划代码X的哈希值hashCode。
[0070]对行政区划代码X,按漂白过程中相同方式计算出一个哈希值hashCode。例如为X的六位数字之和,“440306”的哈希值为4+4+0+3+0+6 =17。
[0071]步骤220、计算行政区划代码X对应的列表序号grouplndex:grouplndex =mod(hashCode,AddrCodeGroups)。
[0072]哈希值hashCode对分组数AddrCodeGroups取模,模数为其对应的组数:grouplndex = hashCode % AddrCodeGroups。如 “440306” 的组数为 17% 20 = 17。
[0073]步骤230、将行政区划代码X存入grouplndex对应的列表中。
[0074]通过上述步骤准备行政区划代码数据,接下来进行身份证号码反向漂白过程。
[0075]步骤240、输入待反向漂白身份证号码,按前述方式计算待反向漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex。
[0076]取身份证号码的前6位行政区划代码X,计算其哈希值hashCode (计算方法需与上面行政区划代码数据整理过程中的计算方法相同),并计算其对应的组数:groupIndex =hashCode % AddrCodeGroups0
[0077]步骤250、计算X在grouplndex对应的列表codeList的位置codelnd ;取codeList中mod (codelnd - CodeShift,len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为漂白时使用的偏移量。
[0078]计算新的行政区划代码(1-6位)。取得grouplndex对应的行政区划代码列表codeList,计算x在codeList的位置codelndo取漂白过程中用的偏移量CodeShift,如CodeShift = 170取codeList中codelnd-CodeShift位置上的行政区划代码作为新的行政区划代码,如果codelnd-CodeShift小于0,则位置需加上codeList的长度(Ien),即取codelnd - CodeShift+len位置上的代码,即从尾部开始循环计数。
[0079]步骤260、根据哈希值hashCode按漂白时的方法计算顺序码的偏移量orderCodeShift ;新顺序码 newOrderCode = mod (orderCode - orderCodeShift,1000),其中orderCode为旧顺序码。
[0080]计算新的顺序码(13-15位)。使用漂白过程中的顺序码偏移量计算方法计算顺序码偏移量,如为groupIndexX 13-17 ;新的顺序码newOrderCode为旧顺序码orderCode减去此偏移量,例如 newOrderCode = orderCode - (grouplndexX 13 - 17)。如果新顺序码newOrderCode小于0,则newOrderCode需加上1000,否则如果大于或等于 1000,则需减去
1000ο
[0081 ] 步骤270、根据旧顺序码OrderCode按漂白时的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod (YY - YYShift, 100),其中YY为旧年份编码。
[0082]计算新的年份编码(7-8位)。使用漂白过程中的年份编码偏移量计算方法计算年份编码的偏移量,但变量为输入的旧顺序码,如为(orderCode% 13) X2 - 13 ;新的年份编码newYY为旧编码YY减去此偏移量。如newYY = YY - ((orderCode% 13) X2 - 13)。如果newYY小于0,则newYY需加上100,否则如果大于或等于100,newYY,则需减去100。
[0083]步骤280、根据I日年份编码YY按漂白时的方法计算月份编码的偏移量丽Shift ;新月份编码newMM = (MM -丽Shift,12),其中丽为旧月份编码。
[0084]计算新的月份编码(9-10位)。使用漂白过程中的月份编码偏移量计算方法计算月份编码的偏移量,但变量为输入的旧年份编码,如为YY% 11-6 ;新的月份编码newMM为旧月份编码MM减去此偏移量,如mewMM =丽-(YY% 11-6);如果newMM小于1,则需加上12,否则如果大于12,则需减去12。
[0085]步骤290、根据旧月份编码MM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod(DD - DDShift, maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出反向漂白后的身份证号码。
[0086]计算新的日期编码(11-12位)。使用漂白过程中的日期编码偏移量计算方法计算日期编码的偏移量,但变量为输入的旧月份编码,如为MM-5 ;新的日期编码newDD为旧日期编码DD减去此偏移量,如:newDD = DD - (MM - 5);计算新月份newMM对应的月中最大的天数maxDay (如I月最大天数为31,2月闰年最大天数为29,其他年份为28等,其中YY%4等于O时为闰年),如果newDD小于1,则需加上maxDay,否则如果大于maxDay,则需减去maxDay。所有新的15位编码即组成漂白前的身份证号码并输出。
[0087]综上所述,本发明的15位身份证号码漂白方法能够对15位身份证号码进行漂白,保持数据高仿真度、漂白过程不易被破解,适合于漂白大规模数据;本发明的15位身份证号码反向漂白方法,能够将漂白后的15位身份证号码还原成原始15位身份证号码。
[0088]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种15位身份证号码漂白方法,其特征在于,包括: 步骤100、收集所有的行政区划代码数据,初始化AddrCodeGroups个列表codeList以用于存储行政区划代码; 步骤110、按一定的方式计算行政区划代码X的哈希值hashCode ; 步骤120、计算行政区划代码X对应的列表序号group Index: group Index =mod(hashCode,AddrCodeGroups); 步骤130、将行政区划代码X存入grouplndex对应的列表中; 步骤140、输入待漂白身份证号码,按前述方式计算待漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex ; 步骤150、计算X在grouplndex对应的列表codeList的位置codelnd ;取codeList中mod(codelnd+CodeShift, len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为预设的偏移量; 步骤160、根据哈希值hashCode按一定的方法计算顺序码的偏移量orderCodeShift ;新顺序码newOrderCode = mod(orderCode+orderCodeShift,1000),其中 orderCode为旧顺序码; 步骤170、根据新顺序码newOrderCode按一定的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod(YY+YYShift,100),其中YY为旧年份编码; 步骤180、根据新年份编码newYY按一定的方法计算月份编码的偏移量MMShift ;新月份编码newMM = (MM+MMShift,12),其中MM为旧月份编码; 步骤190、根据新月份编码newMM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod(DD+DDShift,maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出漂白后的身份证号码。2.根据权利要求1所述的15位身份证号码漂白方法,其特征在于,计算行政区划代码X的哈希值hashCode的方法仅以x为变量。3.根据权利要求2所述的15位身份证号码漂白方法,其特征在于,行政区划代码X的哈希值hashCode为x的六位数字之和。4.根据权利要求1所述的15位身份证号码漂白方法,其特征在于,orderCodeShift=grouplndexX13 - 17。5.根据权利要求1所述的15位身份证号码漂白方法,其特征在于,YYShift=mod (newOrderCode,13)X 2 - 13。6.根据权利要求1所述的15位身份证号码漂白方法,其特征在于,丽Shift=mod (newYY,11) - 6。7.根据权利要求1所述的15位身份证号码漂白方法,其特征在于,DDShift=newMM - 5。8.一种15位身份证号码反向漂白方法,其特征在于,包括: 步骤200、收集所有的行政区划代码数据,初始化与漂白时数量相同的AddrCodeGroups个列表codeList以用于存储行政区划代码; 步骤210、按与漂白时相同的方式计算行政区划代码X的哈希值hashCode ; 步骤220、计算行政区划代码X对应的列表序号grouplndex: group Index =mod(hashCode,AddrCodeGroups); 步骤230、将行政区划代码X存入grouplndex对应的列表中; 步骤240、输入待反向漂白身份证号码,按前述方式计算待反向漂白身份证号码的行政区划代码X的哈希值hashCode并计算其对应的列表序号grouplndex ; 步骤250、计算X在grouplndex对应的列表codeList的位置codelnd ;取codeList中mod (codelnd - CodeShift,len)位置上的行政区划代码作为新的行政区划代码,其中Ien为codeList的长度,CodeShift为漂白时使用的偏移量; 步骤260、根据哈希值hashCode按漂白时的方法计算顺序码的偏移量orderCodeShift ;新顺序码 newOrderCode = mod (orderCode - orderCodeShift, 1000),其中orderCode为旧顺序码; 步骤270、根据旧顺序码OrderCode按漂白时的方法计算年份编码的偏移量YYShift ;新年份编码newYY = mod(YY - YYShift, 100),其中YY为旧年份编码; 步骤280、根据旧年份编码YY按漂白时的方法计算月份编码的偏移量MMShift ;新月份编码newMM = (MM -丽Shift,12),其中丽为旧月份编码; 步骤290、根据旧月份编码MM按一定的方法计算日期编码的偏移量DDShift,新日期编码newDD = mod(DD - DDShift,maxDay);其中DD为旧日期编码,maxDay为新月份编码newMM对应的月中最大的天数maxDay ;输出反向漂白后的身份证号码。9.根据权利要求8所述的15位身份证号码反向漂白方法,其特征在于,计算行政区划代码X的哈希值hashCode的方法仅以x为变量。10.根据权利要求9所述的15位身份证号码漂白方法,其特征在于,行政区划代码X的哈希值hashCode为x的六位数字之和。
【专利摘要】本发明涉及15位身份证号码漂白和反向漂白方法。该漂白方法包括:步骤100、初始化AddrCodeGroups个列表;步骤110、计算行政区划代码x的hashCode;步骤120、计算x对应的列表序号groupIndex;步骤130、将x存入groupIndex对应的列表中;步骤140、输入待漂白身份证号码,按前述方式计算x的hashCode及groupIndex;步骤150、计算x在groupIndex对应的列表codeList的位置codeInd;步骤160、根据hashCode计算顺序码的orderCodeShift;步骤170、根据新顺序码按一定的方法计算年份编码的YYShift;步骤180、根据新年份编码按一定的方法计算月份编码的MMShift;步骤190、根据新月份编码按一定的方法计算日期编码的DDShift,输出漂白后的身份证号码。本发明还提供了相应的反向漂白方法。本发明的漂白和反向漂白方法保持数据高仿真度、漂白过程不易被破解。
【IPC分类】G06F21/62
【公开号】CN104899520
【申请号】CN201510309141
【发明人】王明兴, 贾西贝
【申请人】深圳市华傲数据技术有限公司
【公开日】2015年9月9日
【申请日】2015年6月8日

最新回复(0)