一種高效黑名單搜索方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于信息安全領(lǐng)域,尤其涉及一種高效黑名單搜索方法。
【背景技術(shù)】
[0002] 每一張人民幣擁有冠字號,冠字號碼是一張紙幣的唯一編號,冠字號碼由數(shù)字和 大寫字母組成,長度為十位。
[0003] 冠字號黑名單分為假幣特征的冠字號碼,盜搶幣的冠字號碼,或者其它需要進(jìn)行 篩選和攔截的冠字號碼。A點驗鈔機(jī),清分機(jī)或者ATM等現(xiàn)金設(shè)備內(nèi)部存儲可以存儲幾十萬 以上黑名單,這類現(xiàn)金設(shè)備,具有CIS圖像掃描模塊,掃描的圖片通過內(nèi)置軟件可以識別出 人民幣的冠字號碼,得到冠字號碼后,內(nèi)置程序搜索存儲的黑名單記錄,發(fā)現(xiàn)有匹配的記 錄,就進(jìn)行攔截并做出提示?,F(xiàn)金設(shè)備清點紙幣的速度一般為每分鐘900到1500張,以1500 張最大值計算,處理每張紙幣的時間只有66毫秒到40毫秒,能夠留給冠字號搜索和攔截的 時間就更少了,一般不超過8毫秒,現(xiàn)金設(shè)備中性能最差的是A類點鈔機(jī),一般為500MHZ左右 的CPU,這對黑名單的搜索算法提出很高要求。黑名單分為沒有帶通配符(*)和帶有通配符 (*)的黑名單,通配符標(biāo)明該位置為任意數(shù)字和字母。黑名單示例如下:
[0005] 現(xiàn)有的冠字號黑名單搜索方法為遍歷整個黑名單列表,匹配字符,如果有完全匹 配的一條就記錄下來,繼續(xù)匹配字符,直到最后一條黑名單?,F(xiàn)有黑名單搜索方法比對次數(shù) 多,查詢時間久。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供一種高效黑名單搜索方法。其應(yīng)用 在冠字號黑名單搜索時,可適用于低CPU設(shè)備,同時黑名單列表可以支持通配符,黑名單數(shù) 量可以支持50萬以上,搜索時間遠(yuǎn)小于允許的時間5毫秒,可以應(yīng)用在A類點鈔機(jī)這種CPU資 源比較小的設(shè)備上。
[0007] 為解決上述問題,本發(fā)明技術(shù)方案如下:一種高效黑名單搜索方法,該方法包括如 下步驟:
[0008] (1)輸入一條待匹配號碼。
[0009] (2)獲取初始黑名單列表;所述黑名單由普通字符組成,或由普通字符和通配符組 成;所述普通字符為字母或數(shù)字;所述通配符用*或其他特殊字符表示,代表該位置對應(yīng)任 意字母或數(shù)字。
[0010] (3)對步驟2獲取的初始黑名單列表按照字符的ASII值進(jìn)行升序或降序排序,得到 排序黑名單列表。
[0011] (4)設(shè)置查找排序黑名單列表第一列。
[0012] (5)在排序黑名單列表第1列中查找匹配普通字符的最低位置。
[0013] (6)在排序黑名單列表第1列中查找匹配普通字符的最高字符。
[0014] (7)在排序黑名單列表第1列中查找匹配通配符(*)的最低位置。
[0015] (8)在排序黑名單列表第1列中查找匹配通配符(*)的最高位置。
[0016] (9)遞歸執(zhí)行步驟5到8,其中只要查找到匹配,便設(shè)置查找排序黑名單列表的列號 遞增1,直到最后一列。
[0017] (10)在排序黑名單列表的最后一列查找到匹配字符,說明有匹配的黑名單,輸出 該黑名單,否則說明無匹配的黑名單。
[0018] 進(jìn)一步地,在排序黑名單列中查找最低位置匹配字符的方法,具體如下:
[0019] 輸入待匹配號碼,設(shè)置起始位置start = 0,結(jié)束位置end =黑名單列表數(shù)量-1。
[0020] 黑名單列表已經(jīng)排好序,現(xiàn)查找排序后某列匹配字符,按照二分法,取最中間位置 mid處字符,mid=(起始位置start-結(jié)束位置end)/2。
[0021] 如果最中間位置字符ASII值小于輸入的待匹配號碼對應(yīng)位置字符,設(shè)置起始位置 start=mid+l,end位置不變,繼續(xù)循環(huán)查找。
[0022] 如果最中間位置字符ASII值大于輸入的待匹配號碼對應(yīng)位置字符,設(shè)置起始位置 end=mid_l,start位置不變,繼續(xù)循環(huán)查找。
[0023] 如果最中間位置字符ASII值等于輸入的待匹配號碼對應(yīng)位置字符,且最中間位置 前一位置字符ASII值不等于輸入的待匹配號碼對應(yīng)位置字符,則找到最低位置,輸出最低 位置;否則設(shè)置結(jié)束位置end=mid-l,start位置不變,繼續(xù)循環(huán)查找。
[0024] 進(jìn)一步地,該方法的最大字符比對次數(shù)Μ計算公式如下:
[0025] M=log(2)(N) XLX4
[0026] 其中N為黑名單列表數(shù)量,L為黑名單長度,4為每一列采用最多4次二分法計算匹 配字符位置。
[0027] 進(jìn)一步地,所述黑名單為人民幣冠字號黑名單,長度為10位。
[0028] 本發(fā)明的有益效果是:本發(fā)明提出一種黑名單搜索匹配的高效方法,通過對黑名 單的ASII值進(jìn)行排序,采用二分法分別搜索匹配黑名單第一列普通字符和通配符,搜索到 后遞歸搜索下一列,二分法和遞歸搜索最小化字符比較的次數(shù),極大地提高了搜索匹配的 效率,減小查詢時間。
【附圖說明】
[0029] 圖1為本發(fā)明高效黑名單搜索方法主流程圖;
[0030] 圖2為需找最低位置匹配普通字符的方法。
【具體實施方式】
[0031] 下面結(jié)合附圖和實施例對本發(fā)明技術(shù)方案做進(jìn)一步詳細(xì)說明,以下實施例不構(gòu)成 對本發(fā)明的限定。
[0032] 本發(fā)明的總體思路是通過先對黑名單列表進(jìn)行排序,排序后可采用二分法對普通 字符和通配符(*)分別取最低匹配位置和最高匹配位置,一旦能找到匹配的最低或者最高 位置即進(jìn)行遞歸,直到搜索到最后一列,若匹配就輸出所有匹配黑名單;否則說明沒有搜索 到黑名單。
[0033] 以下以人民幣冠字號黑名單搜索為例對本發(fā)明的方法做進(jìn)一步闡述。
[0034] 如圖1所示,本發(fā)明方法包括以下步驟:
[0035] (1)輸入一條待匹配的人民幣冠字號碼。
[0036] (2)獲取初始黑名單列表;所述黑名單由普通字符組成,或由普通字符和通配符組 成;所述普通字符為字母或數(shù)字;所述通配符用*表示,代表該位置對應(yīng)任意字母或數(shù)字。
[0037] (3)對步驟(2)獲取的初始黑名單列表按照字符的ASII值進(jìn)行升序排序,得到排序 黑名單列表,如下表所述:
[0039] (4)設(shè)置查找排序黑名單列表第一列。
[0040] (5)在排序黑名單列表第1列中查找匹配普通字符的最低位置。
[0041] (6)在排序黑名單列表第1列中查找匹配普通字符的最高字符。
[0042] (7)在排序黑名單列表第1列中查找匹配通配符(*)的最低位置。
[0043] (8)在排序黑名單列表第1列中查找匹配通配符(*)的最高位置。
[0044] (9)遞歸執(zhí)行步驟5到8,其中只要查找到匹配,便設(shè)置查找排序黑名單列表的列號 遞增1,直到最后一列。
[0045] (10)在排序黑名單列表的最后一列查找到匹配字符,說明有匹配的黑名單,輸出 該黑名單,否則說明無匹配的黑名單。
[0046] 黑名單搜索方法的最多CPU消耗是字符的比對。以黑名單列表十萬為例,最大比對 次數(shù)1=1噸(2)(100000)\10\4? 680次;以黑名單列表一百萬為例,最大比對次數(shù)1=1呢 (2)(1000000) X10X4 ? 1360次。
[0047] 圖2示提出了查找匹配普通字符的最低位置的方法,包括以下步驟:
[0048] (1)輸入需要比對的冠字號碼,設(shè)置起始位置start = 0,結(jié)束位置end =黑名單列 表數(shù)量-1。
[0049] (2)黑名單列表已經(jīng)排好序,現(xiàn)查找排序后某列匹配字符,按照二分法,取最中間 位置(mid =(起始位置start-結(jié)束位置end) /2)字符。
[0050] (3)如果所述最中間字符ASII值小于所述的冠字號碼對應(yīng)位置字符,設(shè)置起始位 置8七31^=1111(1+1,611(1位置不變,繼續(xù)循環(huán)查找。
[0051] (4)如果所述最中間字符ASII值大于所述的冠字號碼對應(yīng)位置字符,設(shè)置起始位 置end=mid-l,start位置不變,繼續(xù)循環(huán)查找。
[0052] (5)如果所述最中間字符ASII值等于所述的冠字號碼對應(yīng)位置字符,且所述最中 間位置前一位置字符ASII值不等于所述的冠字號碼對應(yīng)位置字符,則找到最低位置,輸出 最低位置;否則設(shè)置結(jié)束位置end=mid-l,start位置不變,繼續(xù)循環(huán)查找。
[0053]以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進(jìn)行限制,在不背離本發(fā)明精 神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變 形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【主權(quán)項】
1. 一種高效黑名單搜索方法,其特征在于,該方法包括如下步驟: (1) 輸入一條待匹配號碼。 (2) 獲取初始黑名單列表;所述黑名單由普通字符組成,或由普通字符和通配符組成; 所述普通字符為字母或數(shù)字;所述通配符用*或其他特殊字符表示,代表該位置對應(yīng)任意字 母或數(shù)字。 (3) 對步驟2獲取的初始黑名單列表按照字符的ASII值進(jìn)行升序或降序排序,得到排序 黑名單列表。 (4) 設(shè)置查找排序黑名單列表第一列。 (5) 在排序黑名單列表第1列中查找匹配普通字符的最低位置。 (6) 在排序黑名單列表第1列中查找匹配普通字符的最高字符。 (7) 在排序黑名單列表第1列中查找匹配通配符(*)的最低位置。 (8) 在排序黑名單列表第1列中查找匹配通配符(*)的最高位置。 (9) 遞歸執(zhí)行步驟5到8,其中只要查找到匹配,便設(shè)置查找排序黑名單列表的列號遞增 1,直到最后一列。 (10) 在排序黑名單列表的最后一列查找到匹配字符,說明有匹配的黑名單,輸出該黑 名單,否則說明無匹配的黑名單。2. 根據(jù)權(quán)利要求1所述的一種高效黑名單搜索方法,其特征在于,在排序黑名單列中查 找匹配普通字符的最低位置的方法,具體如下: 輸入待匹配號碼,設(shè)置起始位置start = 0,結(jié)束位置end =黑名單列表數(shù)量-1。 黑名單列表已經(jīng)排好序,現(xiàn)查找排序后某列匹配字符,按照二分法,取最中間位置mid 處字符,mid=(起始位置start-結(jié)束位置end)/2。 如果最中間位置字符ASII值小于輸入的待匹配號碼對應(yīng)位置字符,設(shè)置起始位置 start=mid+l,end位置不變,繼續(xù)循環(huán)查找。 如果最中間位置字符ASII值大于輸入的待匹配號碼對應(yīng)位置字符,設(shè)置起始位置end =mid-l,start位置不變,繼續(xù)循環(huán)查找。 如果最中間位置字符ASII值等于輸入的待匹配號碼對應(yīng)位置字符,且最中間位置前一 位置字符ASII值不等于輸入的待匹配號碼對應(yīng)位置字符,則找到最低位置,輸出最低位置; 否則設(shè)置結(jié)束位置end=mid-l,start位置不變,繼續(xù)循環(huán)查找。 在排序黑名單列中查找匹配普通字符的最高位置的方法、查找匹配通配符(*)的最低 位置的方法和查找匹配通配符(*)的最低位置的方法均同上。3. 根據(jù)權(quán)利要求1所述的一種高效黑名單搜索方法,特征在于,該方法的最大字符比對 次數(shù)Μ計算公式如下: M=log(2)(N) XLX4 其中N為黑名單列表數(shù)量,L為黑名單長度,4為每一列采用最多4次二分法計算匹配字 符位置。4. 根據(jù)權(quán)利要求1所述的一種高效黑名單搜索方法,特征在于,所述黑名單為人民幣冠 字號黑名單,長度為10位。
【專利摘要】本發(fā)明公開了一種高效黑名單搜索方法,該方法通過先對黑名單列表進(jìn)行排序,排序后可采用二分法對普通字符和通配符(*)分別取最低匹配位置和最高匹配位置,一旦能找到匹配的最低或者最高位置即進(jìn)行遞歸,直到搜索到最后一列,若匹配就輸入所有匹配黑名單;否則就說明沒有搜索到黑名單。本發(fā)明方法極大地提高了搜索匹配的效率,減小了查詢時間。
【IPC分類】G06F17/30
【公開號】CN105589973
【申請?zhí)枴緾N201610029766
【發(fā)明人】魏偉, 陳祥獻(xiàn), 商莖正, 陳小勇, 虞華鋒, 馮國平, 程露露, 謝愛文
【申請人】浙江維融電子科技股份有限公司
【公開日】2016年5月18日
【申請日】2016年1月17日