1.一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于,包括:
将冠字号分解为m位的号头和n位的号码,构建黑名单数据库文件,黑名单数据库文件包括通配符库、号头位表、号头个数存储区、若干个号头单元和若干个号码单元,号头单元与号码单元一一对应,号码单元包括号码模式记录表和若干个号码存储区;
通配符库,存储有黑名单数据库文件中唯一合法的通配符字符;
号头位表,包括若干位,每一位代表一个特定的号头,且每一位上设置有标识该位代表的号头是否在黑名单数据库文件中的位键值;
号头个数存储区,存储有黑名单数据库文件中号头的总个数;
号头单元,存储有各不相同的号头;
号码单元,每个号码单元与其对应的号头单元存储的号头相关联,存储具有该关联号头的全部号码,号码单元内的每个号码存储区存储有一个号码;
号码模式记录表,将具有相同通配符个数、位置的号码作为一种号码模式,根据号码各位是否为通配符将号码分成2n种号码模式,记录所在号码单元内每一种号码模式对应的号码的个数。
2.根据权利要求1所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:所述号头单元包括号头存储区和索引地址,每个号头存储区存储有一个号头,索引地址指向所在号头单元对应的号码单元。
3.根据权利要求1所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:所述黑名单数据库文件还包括最大普通冠字号个数存储区、最大特殊冠字号个数存储区、普通冠字号个数存储区和特殊冠字号个数存储区,普通冠字号不含有通配符,特殊冠字号含有通配符。
4.根据权利要求2所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:号头的每一位的取值都是从26个字母、10个数字和1个通配符中选取的,将号头看作37进制数,设定0-9这10个数字对应的十进制值为本身值,A-Z这26个字母对应的十进制值分别为10-35,通配符对应的十进制值为36,计算出号头对应的十进制数值,号头位表内的第a+1位代表对应十进制数值为a的号头。
5.根据权利要求4所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:号头单元在黑名单数据库文件中的存放顺序是按照其所存储号头的37进制数值升序排列的。
6.根据权利要求5所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:号码的每一位的取值都是10个数字和1个通配符中选取的,将号码看作11进制数,设定0-9这10个数字对应的十进制值为本身值,通配符对应的十进制值为10,号码单元内号码存储区的存放顺序是按照其所存储号码的11进制数值升序排列的。
7.根据权利要求6所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:号头单元按照其所存储号头的37进制数值升序顺序存放,号码单元按照其关联号头的37进制数值升序顺序存放在号头单元之后,每个号头单元的大小为K1字节,每个号码单元的大小为K2字节;
当需要添加冠字号到黑名单数据库文件时,执行以下步骤:
N1:判断黑名单数据库文件是否为空,如果为空,则添加号头单元和号码单元,根据冠字号的号头设置号头位表,如果不为空,则执行步骤N2;
N2:查询号头位表,判断冠字号的号头是否在黑名单数据库文件中,如果不在黑名单数据库文件中,则执行步骤N3,否则执行步骤N4;
N3:将号头位表内对应位的位键值置1,将号头个数存储区内的号头个数加1,确定号头单元的插入位置并添加号头单元,确定号码单元的插入位置并添加号码单元,更新号码模式记录表,将该号头单元之前的所有号头单元的索引地址加K1,将该号头单元之后的所有号头单元的索引地址加K3,K3=K1+K2;
N4:查找出存储该号头的号头单元对应的号码单元,判断冠字号的号码是否在号码单元中,如果在号码单元中,则添加步骤结束,否则,添加号码,并更新号码模式记录表,将该号头单元之后的所有号头单元的索引地址加K2。
8.根据权利要求7所述的一种支持通配符的纸币冠字号黑名单数据存储方法,其特征在于:当需要删除黑名单数据库文件中的冠字号时,执行以下步骤:
M1:判断黑名单数据库文件是否为空,如果为空,则删除失败,如果不为空,则执行步骤M2;
M2:查询号头位表,判断冠字号的号头是否在黑名单数据库文件中,如果不在黑名单数据库文件中,则删除失败,否则执行步骤M3;
M3:查找出存储该号头的号头单元对应的号码单元,判断冠字号的号码是否在号码单元中,如果不在号码单元中,则删除失败,如果在号码单元中则执行步骤M4;
M4:如果该号头单元是所有号头单元的最后一个且该号码单元只有一个号码,则将号头位表内对应位的位键值置0,将号头个数存储区内的号头个数减1,删除该号头单元和该号码单元,该号头单元之前的所有号头单元的索引地址减K1;
如果该号头单元不是所有号头单元的最后一个且该号码单元只有一个号码,则将号头位表内对应位的位键值置0,将号头个数存储区内的号头个数减1,删除该号头单元和该号码单元,该号头单元之前的所有号头单元的索引地址减K1,该号头单元之后的所有号头单元的索引地址减K3,K3=K1+K2;
如果该号头单元是所有号头单元的最后一个且该号码单元有多个号码,则删除该号码单元中对应的号码,更新号码模式记录表;
如果该号头单元不是所有号头单元的最后一个且该号码单元有多个号码,则删除该号码单元中对应的号码,更新号码模式记录表,该号头单元之后的所有号头单元的索引地址减K2。
9.一种基于权利要求1所述的一种支持通配符的纸币冠字号黑名单数据存储方法的数据检索方法,其特征在于,包括:
S1:读取输入的待查冠字号,取出待查冠字号的号头,该号头为不含通配符的普通号头,将号头中的一位或多位上的数值用通配符替换,得到2m -1个含有通配符的不同特殊号头,将普通号头和特殊号头作为待查号头;
S2:依次查询每个待查号头在号头位表中对应位的位键值,根据位键值判断待查号头是否存储在黑名单数据库文件中,当查询到某个待查号头存储在黑名单数据库文件中时,执行步骤S3,如果所有待查号头都没有存储在黑名单数据库文件中,则输出待查冠字号不在黑名单中的信息;
S3:取出待查冠字号的号码,该号码为不含通配符的普通号码,将号码中的一位或多位上的数值用通配符替换,得到2n -1个含有通配符的不同特殊号码,将普通号码和特殊号码作为待查号码;
查找出存储该待查号头的号头单元对应的号码单元,依次查询该号码单元的号码模式记录表中每种号码模式对应的号码的个数,当查询到某种号码模式对应的号码个数大于0时,获取属于该号码模式的待查号码,查询号码单元内是否存储有该待查号码,如果存在,则输出待查冠字号在黑名单中的信息,并结束查询,否则继续查询剩余未查询的号码模式对应的号码的个数;
当号码模式记录表中的所有号码模式都被查询过时,如果号码单元内没有存储任何一个待查号码,则输出待查冠字号不在黑名单中的信息。