发明内容
本发明的实施例提供了一种数据表中隐私数据的发现与分类方法,以实现有效地提取数据表中的关键数据。
为了实现上述目的,本发明采取了如下技术方案
一种数据表中隐私数据的发现与分类方法,包括:
预先设定各个隐私数据种类对应的隐私数据分析规则;
提取数据表中的采样数据;
按照设定的隐私数据种类分析顺序和所述各个隐私数据种类对应的隐私数据分析规则,对所述采样数据进行隐私数据分析,根据分析结果发现所述采样数据中的隐私数据种类。
所述的预先设定各个隐私数据种类对应的隐私数据分析规则,包括:
选取身份证号码、邮政编码、营业执照号、组织机构代码、纳税人识别号、电子邮件地址、企业名称、电话号码、中文姓名和地址共10种隐私数据种类,分别设定所述10种隐私数据种类对应的隐私数据分析规则,构造隐私数据种类对应的数据字典,该数据字典中存储了对应的隐私数据种类中的典型数据。
所述的预先设定各个隐私数据种类对应的隐私数据分析规则,包括:
针对每个隐私数据种类设置一个或者多个计数器;
将所述中文姓名种类的隐私数据划分为姓名、姓氏和名字三个子类,并对姓名、姓氏和名字三个子类分别设置一个计数器,针对所用到的姓氏字典设置一个数组计数器;
将所述电话号码种类的隐私数据划分为混合电话号码、移动电话号码、固话号码和疑似电话号码四个子类,并对移动电话号码、固话号码和疑似电话号码分别设置一个计数器;
将所述中国地址种类的隐私数据划分为省、市、县、镇、村和街道/路六个级别,根据所述六个级别衍生出21个子类,分别是:省、省到市、省到县、省到镇、省到村、省到路、市、市到县、市到镇、市到村、市到路、县、县到镇、县到村、县到路、镇、镇到村、镇到路、村、村到路、路;对省/直辖市/自治区、地市/自治州、县、乡/镇、村和道路六个级别分别设置一个计数器;
将其余七种隐私数据每种类型分别设置一个计数器
所述的提取数据表中的采样数据之前,还包括:
读取所述数据表所在的数据库的元数据,该元数据包括每个数据表的数据表名、数据中存储的数据的描述信息,以及每个数据表中的每个字段的字段名、数据类型定义、数据长度精度限制信息,根据所述元数据判断出所述数据库中需要进行隐私数据分析的数据表和数据表中需要进行隐私数据分析的字段;
根据所述数据表中每个字段的字段类型和长度精度,确定每个字段需要匹配的一个或者多个隐私数据分析规则。
所述的提取数据表中的采样数据,包括:
设置数据表的采样行数规则为:提取数据表的前N行,从数据表的第N+1行开始提取M‰比率的数据行;当所述数据表中的全部数据记录的行数小于等于所述采样行数阈值N,则提取所述数据表中的全部记录行数的数据作为采样数据;当所述数据表中的数据记录的行数大于所述采样行数阈值,则提取所述数据表中的排列在前列的所述采样行数阈值N的行数,以及排列在所述采样行数阈值的行数后面的全部数据记录的行数的设定比率M‰作为采样数据。
所述的按照设定的隐私数据种类分析顺序和所述各个隐私数据种类对应的隐私数据分析规则,对所述采样数据进行隐私数据分析,根据分析结果发现所述采样数据中的隐私数据种类,包括:
选取所述采样数据中的第一张数据表的第一行数据记录的数据,对所述第一行数据记录的数据进行拆分,得到多个字段的数据,选取第一个字段的数据,当所述第一字段的类型为数值类型的字段,且长度为6位或以上,没有小数位,则依次按照邮政编码、营业执照号和电话号码对应的隐私数据分析规则,对所述第一个字段的数据进行隐私数据分析;
当所述第一字段的类型为字符串类型的字段,且长度大于等于2,则依次按照身份证号码、邮政编码、营业执照号、纳税人识别号、组织机构代码、电子邮件地址、企业名称、电话号码、中文姓名和地址对应的隐私数据分析规则,对所述第一个字段的数据进行隐私数据分析;
当所述第一个字段的数据和某个隐私数据分析规则匹配时,则将所述某个隐私数据分析规则对应的隐私数据种类的计数器的计数值加一;
选取第二个字段的数据,按照所述第一个字段的数据的隐私数据的分析过程,对所述第二个字段的数据进行隐私数据分析,依次类推,对所述第一行数据记录中的每个字段的数据进行隐私数据分析;
选取所述采样数据中的第二行数据记录的数据,按照所述第一行数据记录的数据的隐私数据的分析过程,对所述第二行数据记录的数据进行隐私数据分析,依次类推,对所述采样数据中的所有数据表中的所有行数据记录的数据进行隐私数据分析;
读取某个数据表中的每一个字段对应的隐私数据种类的计数器的计数值,当某个字段对应的某个隐私数据种类的计数器的计数值达到设定的隐私数据判定阈值,则判断该字段的数据类型为所述某个隐私数据种类。
当按照电话号码对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
当进行移动电话号码分析时,判断字段的数据格式为:国际字冠间隔符国家代码间隔符移动电话号码本体,国际字冠为00、+或者没有,国家代码为86或没有,中间的间隔符为“-”、空格或者没有,移动电话号码本体长度为11位,并且从数字的最右边数起的第9-11位匹配移动电话号码数据字典中包括的移动电话号码的前三位字符,则将移动电话号码对应的计数器的计数值+1;
当进行固话电话分析时,对字段的数据中除了+号以外的符号都换成‘-’,得到符号转换后的字段的数据,对所述符号转换后的字段的数据按照设定的正则表达式进行匹配,所述设定的正则表达式为:((((00|\+)?86(\+|-)?)|\+)?(0)?(10|2\d{1}|[3-9]\d{2})-?)?[2-8]\d{6,7}(-?\d{2,4})?,当所述正则表达式匹配成功,且上述正则表达式能够成功获取固定电话区号,那么将所述获取的区号去匹配固定电话区号数据字典,若匹配成功则将固话电话对应的计数器的计数值+1;
当进行疑似电话号码分析时,判断字段的数据是否满足日期格式,该日期格式包括:[四位年份]+[两位月份]+[两位天],[两位天]+[两位月份]+[四位年份],[两位月份]+[两位天]+[四位年份],如果是,则判定该字段的数据不为电话号码,针对该字段数据电话号码判断逻辑结束;否则,则将疑似电话号码对应的计数器的计数值+1;
当所述采样数据中所述字段的数据全部分析完成后,对各计数器值进行分析:
当所述移动电话号码对应的计数器的计数值占该字段整体有效行数总值占比达上限阀值,而固定电话计数值的占比小于下限阀值时,则判断所述字段的数据类型为移动电话号码;
当所述固话电话对应的计数器的计数值占该字段整体有效行数总值占比达上限阀值,而移动电话计数器的占比小于下限阀值时,则判断所述字段的数据类型为固话电话;
当移动电话和固定电话计数值的占比分别都大于下限阀值,且两个计数值占比之和达到上限阀值时,则判断所述字段的数据类型为混合电话号码;
当所述移动电话和固定电话计数器的计数值的占比均小于下限值,且疑似电话号码对应的计数器的计数值相对该字段整体有效行数总值的占比大于设定比例,则判断所述字段的数据类型为疑似电话号码;
当所述移动电话号码对应的计数器、所述固话电话对应的计数器和所述疑似电话号码对应的计数器三个计数器的计数值总值不大于设定的电话号码判断阈值时,则判断所述字段的数据类型不为电话号码。
当按照中文姓名对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
将中文姓名分成姓名、姓氏和名字三个子类,分别设置姓名、姓氏和名字对应的计数器,设置姓氏字典中所有姓氏组成的数组对应的计数器;
当所述字段的数据的最左边的字符匹配姓氏字典中包含的姓氏,并且所述字段的数据中在所述姓氏的右边还有字符,则将姓名对应的计数器的计数值加1,将所述字典姓氏对应的数组计数器的计数值加1,并将所述姓名对应的统计值加1;
当所述字段的数据的最左边的字符匹配姓氏字典中包含的姓氏,并且所述字段的数据中在所述姓氏的右边没有字符,则将姓氏对应的计数器的计数值加1,将所述字典姓氏对应的数组计数器的计数值加1,并将所述姓氏对应的统计值加1;
当所述采样数据中所述字段的数据全部分析完成后,所述姓氏计数器的计数值、所述数组计数器大于进行分析的所述字段的数据的总数量的设定比例,并且,统计值大于设定数值的姓氏的数量大于设定的数量阈值,则判定所述字段的数据类型为姓氏;
当所述采样数据中所述字段的数据全部分析完成后,如果姓名计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例,统计所有所述字段的数据中重复的数据,当重复的数据占所有所述字段的数据的比例小于设定的阈值,则判定所述字段的数据类型为姓名。
当按照中文姓名对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
当判定某个字段的数据类型为姓氏后,对所述某个字段所在的数据记录行中的其它字段的数据进行单字拆分,将每个单字分别在名字字典中进行匹配,当每个单字都匹配名字字典中包括的名字时,则将名字对应的计数器的计数值加1;
当所述其它字段的数据全部分析完成后,如果名字计数器的计数值大于进行匹配的所述其它字段的数据的总数量,则判定所述其它字段的数据类型为名字。
当按照地址对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
使用正向最大匹配法对字段的数据进行中文分词,获得所述字段的数据中的地址分词,生成所述地址分词的hash值;
判断所述字段的数据中是否包含设定的街道/路的关键字,如果包含,则将所述地址分词的hash值分别在街道/路字典、省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;否则,将所述地址分词的hash值分别在省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;
当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,当所述采样数据中所述字段的数据全部分析完成后,根据所述六个子类对应的计数器的计数值确定所述某个字段的数据类型。
所述的当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,包括:
使用中文分词正向最大匹配法对所述字段的数据进行分词,根据六个级别的中文地址字典的内容重新组织生成另一套地址分词字典,所述地址分词字典包括:15字字典、13字字典、12字字典、11字字典、10字字典、9字字典、8字字典、7字字典、6字字典、5字字典、4字字典、3字字典、2字字典,并生成所述地址分词字典中每个字典对应的hashmap索引结构;
从所述字段的数据由左至右取出连续的15个中文字并生成hash值,长度不够15字的取最大连续中文字,将所述15个中文字对应的hash值在15字字典的hashmap索引结构中匹配;若所述15个中文字对应的hash值没有在15字字典的hashmap索引结构中匹配到,那么将所述15个中文字最右边去除两个单字,得到一个13字的中文字符串并生成hash值,将所述13个中文字对应的hash值在13字字典的hashmap索引结构进行匹配;
若所述13个中文字对应的hash值没有在13字字典中的hashmap索引结构匹配到,那么将所述13字中文字符串最右边去除一个单字,得到一个12字的中文字符串并生成hash值,将所述12个中文字对应的hash值在12字字典的hashmap索引结构进行匹配,如此重复循环,直到所述字段的数据的某个中文字的hash值在某个地址分词字典的hashmap索引结构中匹配成功,则将所述hash值对应的中文字符串为一个有效中文地址分词,并记录下来,不进行后续的hash值在地址分词字典的hashmap索引结构中的匹配操作;
若所述字段的数据的所有中文字的hash值在所有地址分词字典的hashmap索引结构中都没有匹配成功,则获得所述字段的数据的一个中文单字,将所述字段的数据左边去除获得的所述有效中文地址分词或者中文单字,得到剩余中文字符串,按照所述字段的数据在所有地址分词字典的hashmap索引结构中的匹配过程,将所述剩余中文字符串在所有地址分词字典的hashmap索引结构中进行匹配,获得若干有效中文地址分词、单字、数字或特殊字符;
从所述有效中文地址分词从左到右取词,生成所述中文地址分词的hash值,将所述中文地址分词的hash值在各个地址分词字典对应的hashmap索引结构中进行检索,当所述某个地址分词字典对应的hashmap索引结构中检索到所述中文地址分词的hash值,将所述某个地址分词字典对应级别的计数器的计数值加1;重复执行上述处理过程,直到所有有效中文地址分词在各个地址分词字典对应的hashmap索引结构中都检索完毕;
选取所述采样数据中的下一个数据记录中的所述字段的数据,对所述下一个数据记录中的所述字段的数据进行隐私数据匹配,直到所述采样数据中所有所述字段的数据都进行了隐私数据匹配。
所述的采样数据中所述字段的数据全部匹配完成后,根据所述六个级别对应的计数器的计数值确定所述某个字段的数据类型,包括:
当所述六个级别对应的计数器的计数值之和大于等于进行匹配的所述字段的数据的总数量的100%,则判断所述字段的数据类型为地址。
所述方法还包括:
当判断所述字段的数据类型为地址后,获取六个级别对应的6个地址字典分别对应的特征标识位,并计算所述每个特征标志位的计数器的计数值在所述整个字段数据总量所占的百分比,获取大于特定百分比的特征标志位的最宽的区间,将所述最宽的区间中包含的级别对应子类作为该字段最终的隐私数据类型特征。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例通过预先设定各个隐私数据种类对应的隐私数据分析规则,按照设定的隐私数据种类分析顺序和各个隐私数据种类对应的隐私数据分析规则,对采样数据进行隐私数据分析,可以自动、有效地发现企业应用数据库的数据表中的隐私数据种类,高效率地将企业应用数据库的数据表中的关键数据找出来并归类。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
实施例一
本发明实施例提供了一种有效的、能显著提高准确率的方法,能让企业单位在自身众多复杂的系统当中,找到关键数据并进行分类,便于进一步采取相应的措施。
该实施例提供了一种数据表中隐私数据的发现与分类方法的处理流程如图1所示,包括如下的处理步骤:
步骤S110、预先设定各个隐私数据种类对应的隐私数据分析规则和计数器。
本发明实施例的隐私数据发现和分类的基本原理是对采样数据中的字段的数据进行扫描和分析,得到字段的数据的特征,然后对字段的数据进行归类。同一个字段的数据,需要经过所有隐私数据种类的特征规则算法的分析统计,最终根据相似度来判断它有最有可能是哪一种类型的隐私数据。上述隐私数据可以称为私密数据或敏感信息。
本发明实施例选取身份证号码、邮政编码、营业执照号(工商注册号)、组织机构代码、纳税人识别号、电子邮件地址、企业名称、电话号码、中文姓名和地址共10种隐私数据种类,分别设定10种隐私数据种类对应的隐私数据分析规则,该隐私数据分析规则在后面的数据分析过程中将详细描述。
针对每个隐私数据种类设置一个或者多个计数器。比如,将所述中文姓名种类的隐私数据划分为姓名、姓氏和名字三个子类,并对姓名、姓氏和名字三个子类分别设置一个计数器。
将中国地址种类的隐私数据划分为省、市、县、镇、村和街道/路六个级别,根据所述六个级别衍生出21个子类,分别是:省、省到市、省到县、省到镇、省到村、省到路、市、市到县、市到镇、市到村、市到路、县、县到镇、县到村、县到路、镇、镇到村、镇到路、村、村到路、路。
对省、市、县、镇、村和街道/路分别设置一个计数器。
将电话号码种类的隐私数据划分为:混合电话号码、移动电话号码、固话号码和疑似电话号码四个子类,分别设置移动电话号码、固话号码和疑似电话号码对应的计数器。
构造每种隐私数据种类对应的数据字典,该数据字典中存储了对应的隐私数据种类中的典型数据。比如,固话区号字典中存储了中国绝大部分固定电话号码的区号,中文姓氏数据字典中存储了中国绝大多数的姓氏。
步骤S120、根据数据库的元数据,获取需要进行隐私数据分析的数据表,以及数据表中的字段类型。
读取所述数据表所在的数据库的元数据,该元数据包括每个数据表的数据表名、数据中存储的数据的描述信息,以及每个数据表中的每个字段的字段名、数据定义、数据限制信息,根据所述元数据判断出所述数据库中需要进行隐私数据提取的数据表和数据表中需要进行隐私数据提取的字段,以及每个字段的字段类型,该字段类型包括数值类型的字段和字符串类型的字段。
根据所述数据表中每个字段的字段类型,确定每个字段需要匹配的一个或者多个隐私数据分析规则。
数值类型的字段,必须满足以下条件:长度需要大于等于6,没有小数位。数值类型的字段只需要分析电话号码、邮政编码和工商注册号的隐私数据分析规则。字符串类型的字段必须大于等于2,需要分析所有的隐私数据分析规则。
步骤S130、提取需要进行隐私数据分析的数据表中的采样数据。
设置数据表的采样行数阈值,当所述数据表中的全部数据记录的行数小于所述采样行数阈值,则提取所述数据表中的全部记录行数的数据作为采样数据;当所述数据表中的数据记录的行数大于或者等于所述采样行数阈值,则提取所述数据表中的排列在前列的所述采样行数阈值的行数,以及排列在所述采样行数阈值的行数后面的全部数据记录的行数的设定比率作为采样数据。
比如,上述采样行数阈值为1000,采样率缺省为取前1000行,后面从1001行开始取千分之一,每1000行取一行,采样率可根据实际情况配置选择。
步骤S140、按照设定的隐私数据种类分析顺序和各个隐私数据种类对应的隐私数据分析规则,对采样数据进行隐私数据分析,根据分析结果发现采样数据中的隐私数据种类和所在位置。
选取采样数据中的第一行数据记录的数据,对所述第一行数据记录的数据进行拆分,得到多个字段的数据,选取第一个字段的数据,当所述第一字段的类型为数值类型的字段,且长度为6位或以上没有小数位,则依次按照邮政编码、营业执照号和电话号码对应的隐私数据分析规则,对所述第一个字段的数据进行隐私数据分析,根据分析结果提取所述采样数据中的隐私数据种类。
当所述第一字段的类型为字符串类型的字段,且长度大于等于2,则依次按照身份证号码、邮政编码、营业执照号、纳税人识别号、组织机构代码、电子邮件地址、企业名称、电话号码、中文姓名和地址对应的隐私数据分析规则,对所述第一个字段的数据进行隐私数据分析,当所述第一个字段的数据和某个隐私数据分析规则分析时,则将所述第一个字段对应的所述某个隐私数据分析规则对应的隐私数据种类的计数器的计数值加一;选取第二个字段的数据,按照所述第一个字段的数据的隐私数据的分析过程,对所述第二个字段的数据进行隐私数据分析,依次类推,对所述第一行数据记录中的每个字段的数据进行隐私数据分析;
选取所述采样数据中的第二行数据记录的数据,按照所述第一行数据记录的数据的隐私数据的分析过程,对所述第二行数据记录的数据进行隐私数据分析,依次类推,对所述采样数据中的所有行数据记录的数据进行隐私数据分析;
读取每一个字段对应的隐私数据种类的计数器的计数值,当某个字段对应的某个隐私数据种类的计数器的计数值达到设定的隐私数据判定阈值,则判断所述某个字段的数据类型为所述某个隐私数据种类。
下面分别介绍各种隐私数据种类对应的隐私数据分析规则。
规则与算法
统一规则:
1.输入值为空值、空串或者空格均不计入阀值统计。
2.全角字符预先在调用层转换成半角处理;
3.以下每种隐私数据类型的内部的算法规则,若无特别说明,均为顺序执行且不可忽略,即某条规则校验失败则后面的规则无需校验,该种隐私数据类型判断失败。
4.字典检索加速方法,本发明实施例提供的一种根据关键字的hash值检索得到完整关键词的示意图如图2所示,针对字典值超过100个的字典建议开始使用此方法:
a)将字典中的每一个数据分别使用hash算法生成hash值;
b)将字典中所有数值的hash值分别取特定数值的余数,而每个具体的余数值都对应一个槽位用于存放对应的hash值,该槽位为第一级别,比如取39的余数对应会有0到38余数值总共39个一级槽位;
c)将所述hash值根据其特定值的余数,按顺序放入对应所述槽位;
d)这样即完成多级hashmap索引的第一级别的构建;
e)将所述第一个槽位的hash值取出再次取非上述特定数值因子的数值的余数,同时会得到对应多个二级槽位,这里举例取37的余数,那么每个上述的一级槽位会对应有最多37个二级槽位;
f)将所述每个一级槽位的hash值再分别按顺序装入对应的所述二级槽位,完成多级hashmap索引的第二级别的构建;
g)再将上述某个二级槽位的hash值取出,并计算其非上述所有特定数值因子的数值的余数,对应得到若干个三级槽位,举例这里取34的余数,那么每个上述的二级槽位会对应有最多34个三级槽位;
h)将所述每个二级槽位的hash值再分别按顺序装入对应的所述三级槽位,完成多级hashmap索引的第三级别的构建;
i)如此重复,直到每个槽位中的hash值数量小于等于特定阀值数量,即完成整个多级hashmap索引的构建;
j)字生成的索引结构留着内存中待用
k)字段数据在使用所述字典的hashmap索引结构进行匹配查找时,需要将所述字段数据用同样的hash算法生成hash值在索引中匹配搜索
当按照身份证号码对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,身份证号码对应的隐私数据分析规则如下:
1.数据长度为18或者15
2.18位的情况:
a)第7~14位为有效年份数字,18600101至当前日期之间
b)第18位的校验位能够计算校验通过,满足ISO 7064:1983.MOD11-2校验
3.15位情况:
a)第7~12位为有效年份数字
4.当采样数据中所述字段的数据全部分析完成后,如果身份证号码的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,80%),则判定所述字段的数据类型为身份证号码。
当按照邮政编码对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,邮政编码对应的隐私数据分析规则如下:
1.数据长度为6
2.只存在阿拉伯数字
3.数据能够在邮政编码字典DICT_CN_ZIPCODE当中找到
4.当采样数据中所述字段的数据全部匹配完成后,如果邮政编码的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,60%),则判定所述字段的数据类型为邮政编码。
当按照营业执照号(工商注册号)对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,营业执照号(工商注册号)对应的隐私数据分析规则如下:
1.长度为15位
2.第15位末尾满足GB/T 17710-1999中的规定的“MOD 11,10”校验算法
3.前六位能够在行政区划码字典DICT_CN_DIVCODE当中找到
4.当采样数据中所述字段的数据全部分析完成后,如果营业执照号的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,60%),则判定所述字段的数据类型为营业执照号。
当按照组织机构代码对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,组织机构代码对应的隐私数据分析规则如下:
1.判断格式为,前面有8位数字或者字母,然后去除特殊字符,剩余1位数字
2.第9位末尾满足校验算法:
C9=11-MOD(∑Ci(i=1→8)×Wi,11)
式中:MOD——代表求余函数;
i——代表代码字符从左至右位置序号;
Ci——代表第i位上的代码字符的值(具体代码字符见附表);
C9——代表校验码;
Wi——代表第i位上的加权因子,其数值见下表:
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Wi |
3 |
7 |
9 |
10 |
5 |
8 |
4 |
2 |
3.当C9的值为10时,校验码应用大写的拉丁字母X表示;当C9的值为11时校验码用0表示。
4.当采样数据中所述字段的数据全部分析完成后,如果组织机构代码的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,80%),则判定所述字段的数据类型为组织机构代码。
当按照纳税人识别号对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,纳税人识别号对应的隐私数据分析规则如下:
1.长度为15、17、18、20位
2.前6为行政区划代码,要求能在DICT_CN_DIVCODE字典当中找
3.15位字符串的判断规则
a)参考组织机构代码规则
4.17位字符串判断规则
a)判断7~12位是否为有效日期,满足则返回true
5.18和20位字符串判断规则
a)请参考18位身份证校验规则
6.当采样数据中所述字段的数据全部分析完成后,如果纳税人识别号的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,80%),则判定所述字段的数据类型为纳税人识别号。
当按照Email对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,Email对应的隐私数据分析规则如下:
1.Email格式:[名字部分]@[域名部分]
2.[名字部分]:不能以特殊符号开头,中间允许特殊符号只能是"_"、"-"或者"."
3.字符串必须中含有一个"@"
4.[域名部分]:不能以特殊符号开头或者结尾,中间必须有一个或者两个"."符号;
正则表达式样例:
^[\w_-]+(?:\.[\w_-]+)*@(?:[\w](?:[\w-]*[\w])?)+[\.](?:[\w](?:[\w-]*[\w])?\.)?[\w](?:[\w-]*[\w])?$
5.当采样数据中所述字段的数据全部分析完成后,如果Emai l的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,90%),则判定所述字段的数据类型为Email。
当按照企业单位名称对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,企业单位名称对应的隐私数据分析规则如下:
1.字符串中含有关键字:公司、厂、医院等,关键字字典DICT_CN_UNIT_ORGTYPE_KEY
2.除了关键字外还必须要有至少有两个中文字
3.当采样数据中所述字段的数据全部分析完成后,如果企业单位名称的计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如,90%),则判定所述字段的数据类型为企业单位名称。
当按照电话号码对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
将所述电话号码种类的隐私数据划分为混合电话号码、移动电话号码、固话号码和疑似电话号码四个子类,并对移动电话号码、固话号码和疑似电话号码分别设置一个计数器。
当进行移动电话号码分析时,判断字段的数据格式为:国际字冠间隔符国家代码间隔符移动电话号码本体,国际字冠为00、+或者没有,国家代码为86或没有,中间的间隔符可以为“-”、空格或者没有。去除字段的数据中的非数字字符,保留数字,当保留的数字的长度等于11或者13,并且从数字的最右边数起的第9-11位匹配移动电话号码数据字典中包括的移动电话号码的前三位字符,比如包含134、138、186等,则将移动电话号码对应的计数器的计数值+1;,若移动电话号码判断规则匹配成功,则无需进行固话号码和疑似电话号码规则分析,直接结束整个电话号码规则判断;
当移动电话号码规则判断失败,则进行固话电话分析,对字段的数据中除了+号以外的符号都换成‘-’,然后去掉重复的--符号,得到符号转换后的字段的数据。
固话格式:固话格式:国际字冠-国家代码-地区代码(区号)-电话号码-分机号
所有'-'号可以没有
国际字冠:或者00、+,可以没有
国家代码:86,可以没有
电话号码:7~8位数字,不以0、1、9开头
分机号:3~4位,可以没有
将上述规则以正则表达式进行匹配,所述设定的正则表达式为:((((00|\+)?86(\+|-)?)|\+)?(0)?(10|2\d{1}|[3-9]\d{2})-?)?[2-8]\d{6,7}(-?\d{2,4})?;
当所述正则表达式匹配成功,且上述正则表达式能够成功获取固定电话区号,那么将所述获取的区号去匹配固定电话区号数据字典,若匹配成功则将固话电话对应的计数器的计数值+1;
若存在'+86'的立即判断为固话固话号码计数器+1,然后结束后续的电话号码分析步骤;
若不存在‘+86’字符,则判断是否存在固话区号,通过字典DICT_CN_FIXPH进行比对,注意必须为最左边不能在中间出现区号;若条件判断成功,则固话号码对应的计数器的计数值+1,然后跳过后面规则结束,否则继续疑似电话号码判断。
当进行疑似电话号码分析时,判断字段的数据是否满足日期格式,该日期格式包括:[四位年份]+[两位月份]+[两位天],[两位天]+[两位月份]+[四位年份],[两位月份]+[两位天]+[四位年份],如果是,则判定该字段的数据不为电话号码,针对该字段数据电话号码判断逻辑结束;否则,则将疑似电话号码对应的计数器的计数值+1;
当所述采样数据中所述字段的数据全部分析完成后,对各计数器值进行分析:
当所述采样数据中所述字段的数据全部分析完成后,将所述移动电话号码对应的计数器的计数值、固话电话对应的计数器的计数值和疑似电话号码对应的计数器的计数值进行求和,得到计数值总值。
判定条件1、当所述移动电话号码对应的计数器的计数值占该字段整体有效行数总值占比达上限阀值,而固定电话计数值的占比小于下限阀值时,则判断所述字段的数据类型为移动电话号码;
判定条件2、当所述固话电话对应的计数器的计数值占该字段整体有效行数总值占比达上限阀值,而移动电话计数器的占比小于下限阀值时,则判断所述字段的数据类型为固话电话;
判定条件3、当移动电话和固定电话计数值的占比分别都大于下限阀值,且两个计数值占比之和达到上限阀值时,则判断所述字段的数据类型为混合电话号码;
判定条件4、当所述移动电话和固定电话计数器的计数值的占比均小于下限值,且所述疑似电话号码对应的计数器的计数值相对该字段整体有效行数总值的占比大于设定比例,则判断所述字段的数据类型为疑似电话号码。
当所述移动电话号码对应的计数器、所述固话电话对应的计数器和所述疑似电话号码对应的计数器三个计数器的计数值总值不大于设定的电话号码判断阈值时,则判断所述字段的数据类型不为电话号码。
当按照中文姓名对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
将中文姓名分成姓名、姓氏和名字三个子类,分别设置姓名、姓氏和名字对应的计数器,为姓氏字典中所有姓氏设置一个数组的计数器,即姓氏字典中的每一个姓氏值都对应使用所述数组中的一个特定元素作为计数器;
当所述字段的数据的最左边的字符匹配姓氏字典中包含的姓氏,并且所述字段的数据中在所述姓氏的右边还有字符,则将姓名对应的计数器的计数值加1,将所述字典姓氏对应的数组计数器的计数值加1,并将所述姓名对应的统计值加1;
当所述字段的数据的最左边的字符匹配姓氏字典中包含的姓氏,并且所述字段的数据中在所述姓氏的右边没有字符,则将姓氏对应的计数器的计数值加1,将所述字典姓氏对应的数组计数器的计数值加1,并将所述姓氏对应的统计值加1。
当所述采样数据中所述字段的数据全部分析完成后,所述姓氏计数器的计数值占所述字段有效数据总数量的比例大于设定比例(比如60%),并且,统计数组计数器中每个元素的百分比,统计值大于设定数值(比如,字段的数据的总数量的1%)的姓氏的数量大于设定的数量阈值(比如10个),则判定所述字段的数据类型为姓氏。
当所述采样数据中所述字段的数据全部分析完成后,如果姓名计数器的计数值大于进行分析的所述字段的数据的总数量的设定比例(比如60%),统计所有所述字段的数据中重复的数据,当重复的数据占所有所述字段的数据的比例小于设定的阈值(比如30%),则判定所述字段的数据类型为姓名。
当判定某个字段的数据类型为姓氏后,对所述某个字段所在的数据记录行中的其它字段的数据进行单字拆分,将每个单字分别在名字字典中进行匹配,当每个单字匹配名字字典中包括的名字时,则将名字对应的计数器的计数值加1。
当所述其它字段的数据全部分析完成后,如果名字计数器的计数值大于进行匹配的所述其它字段的有效数据的总数量的设定比例(比如60%),则判定所述其它字段的数据类型为名字。
由于地址判断算法比较复杂耗时,为了提高效率地址的判断需要等待以上所有的隐私数据类型都判断完成了以后再进行,将那些已经成功判断出来的隐私数据类型排除掉,剩余的表字段重新扫描判断。
当按照地址对应的隐私数据分析规则,对字段的数据进行隐私数据分析时,包括:
将地址分成省、市、县、镇、村和街道/路六个级别,分别设置所述六个子类对应的计数器。
ADR表示这个字段是地址;
P标志位为省,对应字典为DICT_CN_ADDR_PROV
C标志位为市,对应字典为DICT_CN_ADDR_CITY
D标志位为县,对应字典为DICT_CN_ADDR_DIST
T标志位为镇,对应字典为DICT_CN_ADDR_TOWN
V标志位为村,对应字典为DICT_CN_ADDR_VILLAGE
S标志位为街道或者路,对应字典为DICT_CN_ADDR_STREET
通过ADR(mn)表示这个地址当中包含的地址信息含有哪部分,m和n是上面的标志位,注意,上级标志位必须在左边。这就意味根据所述六个级别衍生出21个子类,分别是,分别为:省、市、县、乡、村、道路、省到市、省到县、省到乡、省到村、省到道路、市到县、市到乡、市到村、市到道路、县到乡、县到村、县到道路、乡到村、乡到道路、村到道路。例如ADR(CC)表示这个字段仅仅是市,ADR(DS)表示该字段是区到街道都有。
使用正向最大匹配法对字段的数据进行中文分词,获得所述字段的数据中的地址分词,生成所述地址分词的hash值;
判断所述字段的数据中是否包含设定的街道/路的关键字,该街道/路的关键字可以为“街、路、巷、里、屯、弄、胡同、段、号、室”等。如果包含,则将所述地址分词的hash值分别在街道/路字典、省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;否则,将所述地址分词的hash值分别在省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;
当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,当所述采样数据中所述字段的数据全部分析完成后,根据所述六个子类对应的计数器的计数值确定所述某个字段的数据类型。
所述的当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,包括:
使用中文分词正向最大匹配法对所述字段的数据进行分词,根据六个级别的中文地址字典的内容重新组织生成另一套地址分词字典,所述地址分词字典包括:15字字典、13字字典、12字字典、11字字典、10字字典、9字字典、8字字典、7字字典、6字字典、5字字典、4字字典、3字字典、2字字典,并生成所述地址分词字典中每个字典对应的hashmap索引结构;
从所述字段的数据由左至右取出连续的15个中文字并生成hash值,长度不够15字的取最大连续中文字,将所述15个中文字对应的hash值在15字字典的hashmap索引结构中匹配;若所述15个中文字对应的hash值没有在15字字典的hashmap索引结构中匹配到,那么将所述15个中文字最右边去除两个单字,得到一个13字的中文字符串并生成hash值,将所述13个中文字对应的hash值在13字字典的hashmap索引结构进行匹配;
若所述13个中文字对应的hash值没有在13字字典中的hashmap索引结构匹配到,那么将所述13字中文字符串最右边去除一个单字,得到一个12字的中文字符串并生成hash值,将所述12个中文字对应的hash值在12字字典的hashmap索引结构进行匹配,如此重复循环,直到所述字段的数据的某个中文字的hash值在某个地址分词字典的hashmap索引结构中匹配成功,则将所述hash值对应的中文字符串为一个有效中文地址分词,并记录下来,不进行后续的hash值在地址分词字典的hashmap索引结构中的匹配操作;
若所述字段的数据的所有中文字的hash值在所有地址分词字典的hashmap索引结构中都没有匹配成功,则获得所述字段的数据的一个中文单字,将所述字段的数据左边去除获得的所述有效中文地址分词或者中文单字,得到剩余中文字符串,按照所述字段的数据在所有地址分词字典的hashmap索引结构中的匹配过程,将所述剩余中文字符串在所有地址分词字典的hashmap索引结构中进行匹配,获得若干有效中文地址分词、单字、数字或特殊字符;
从所述有效中文地址分词从左到右取词,生成所述中文地址分词的hash值,将所述中文地址分词的hash值在各个地址分词字典对应的hashmap索引结构中进行检索,当所述某个地址分词字典对应的hashmap索引结构中检索到所述中文地址分词的hash值,将所述某个地址分词字典对应级别的计数器的计数值加1;重复执行上述处理过程,直到所有有效中文地址分词在各个地址分词字典对应的hashmap索引结构中都检索完毕,
选取所述采样数据中的下一个数据记录中的所述字段的数据,对所述下一个数据记录中的所述字段的数据进行隐私数据匹配,直到所述采样数据中所有所述字段的数据都进行了隐私数据匹配。
当所述六个级别对应的计数器的计数值之和大于等于进行匹配的所述字段的数据的总数量的100%,则判断字段的数据类型为地址。
当判断所述字段的数据类型为地址后,获取六个级别对应的6个地址字典分别对应的特征标识位,并计算所述每个特征标志位的计数器的计数值在所述整个字段数据总量所占的百分比,获取大于特定百分比(比如1%)的特征标志位的最宽的区间,将所述最宽的区间中包含的级别对应子类作为该字段最终的隐私数据类型特征。比如RPOV=15,CITY=2394,DIST=21932,TOWN=128,VILLAGE=0,STREET=24398,若该字段总的有效数据量为25000行,那么对应的计数器所占百分比分别为P=0.06%,C=95.8%,D=87.7%,T=0.5%,V=0%,S=97.6%,最宽区间为CS,则判断该字段是地址,且地址特征为市到道路ADR(CS)。。
综上所述,本发明实施例通过预先设定各个隐私数据种类对应的隐私数据分析规则,按照设定的隐私数据种类分析顺序和各个隐私数据种类对应的隐私数据分析规则,对采样数据进行隐私数据分析,可以自动、有效地发现企业应用数据库的数据表中的身份证号码、邮政编码、营业执照号、组织机构代码、纳税人识别号、电子邮件地址、企业名称、电话号码、中文姓名和地址共10种隐私数据种类,高效率地将企业应用数据库的数据表中的关键数据找出来并归类。
为了实施某些安全措施或者数据分析等工作,将企业内部所有系统的隐私数据找出来、分类梳理,意味着从少则几万多则上亿的表字段中整理。应用本发明实施例的方法,能够极大地减小了工作量、缩短工作时间,把不可能变成可能,把几十人月的工作量变成几十人天,大大缩短项目周期、降低项目风险;准确率高,对于比较规整、数据质量比较好的系统,准确率能超过99%。
本发明实施例能够统一用户界面,从原本分散独立的数据源中将数据采样至集中平台,用户在一个界面即可梳理所有系统的所有数据。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。