本申請是申請日為:2014年10月24日、申請?zhí)枮椋?014105779765、名稱為:一種二維碼的生成方法及其應(yīng)用的分案申請。
本發(fā)明涉及二維碼防偽技術(shù)領(lǐng)域,具體為一種二維碼的防偽驗證方法。
背景技術(shù):
目前,基于二維碼的防偽手段較多采用“掃描+輸入”的方式:下載指定的手機客戶端并安裝,通過手機客戶端“掃描”二維碼鏈接至相應(yīng)的網(wǎng)站驗證界面,在已打開的驗證界面中“輸入”驗證碼,再由服務(wù)器完成驗證碼真?zhèn)蔚尿炞C工作,并將驗證結(jié)果信息返回給客戶端,完成對產(chǎn)品真?zhèn)蔚尿炞C。該防偽手段有其局限性:
1、通過一個驗證碼驗證產(chǎn)品的真?zhèn)?,方法單一,防偽手段簡單?/p>
2、需要下載指定的手機客戶端并安裝,且驗證碼需要消費者手動輸入,費時費力。
3、二維碼、驗證碼容易被復(fù)制與重復(fù)使用。
技術(shù)實現(xiàn)要素:
本發(fā)明是為克服現(xiàn)有技術(shù)存在的不足之處,提出一種二維碼的防偽驗證方法,能夠快速、穩(wěn)定的生成大量具有高防偽性、難以被仿造的二維碼,從而有效保證二維碼的唯一性,防止被復(fù)制或者重復(fù)使用。
本發(fā)明為解決技術(shù)問題采用如下技術(shù)方案:
本發(fā)明一種二維碼的防偽驗證方法的特點是按如下步驟進行:
步驟一、二維碼的生成:
步驟1、定義變量i,初始化i=1;
步驟2、生成溯源碼;
步驟2.1、利用式(1)獲取溯源碼的區(qū)間長度rl;
式(1)中,l表示所述溯源碼的長度;n表示生成所述溯源碼的個數(shù),rmax表示隨機函數(shù)rand()的最大值;
步驟2.2、利用式(2)生成第i個溯源碼ri:
ri=(i-1)×rl+rand(rl)1≤i≤n(2)
步驟3、生成前綴碼;
設(shè)置訪問網(wǎng)址url和自定義參數(shù),由所述訪問網(wǎng)址url和自定義參數(shù)構(gòu)成所述前綴碼;
步驟4、生成y位驗證碼;
步驟4.1、設(shè)置一維數(shù)組arr[];
所述一維數(shù)組arr[]的元素是由字母和數(shù)字組成,定義所述一維數(shù)組arr[]的長度為l;
步驟4.2、利用隨機函數(shù)rand(l)生成一個隨機數(shù)m;由所述隨機數(shù)m獲得所述一維數(shù)組arr[]中第m-1個元素arr[m-1];1≤m≤l;
步驟4.3、重復(fù)執(zhí)行y次步驟4.2,從而獲得第i個溯源碼ri對應(yīng)的y位驗證碼;
步驟5、將所述第i個溯源碼ri、前綴碼和y位驗證碼存入防偽數(shù)據(jù)庫中,并將所述第i個溯源碼ri和前綴碼進行合并后利用條碼生成器生成第i個初始二維碼;將所述y位驗證碼嵌入所述第i個初始二維碼的中間位置,從而形成第i個二維碼;
步驟6、將i+1賦值給i并返回步驟2.2執(zhí)行,直到獲得n個二維碼;
步驟二、初步判斷所述待驗證二維碼的真?zhèn)危?/p>
判斷所述待驗證二維碼的中間位置是否包含待檢驗驗證碼;若不包含,則表示待驗證二維碼為偽碼,否則對待驗證二維碼進行掃描,獲得待驗證二維碼的掃描結(jié)果,判斷所述掃描結(jié)果是否包含所述訪問網(wǎng)址url,若沒有包含,則表示所述待驗證二維碼為偽碼;否則,讀取所述掃描結(jié)果中的待驗證溯源碼并執(zhí)行步驟三;
步驟三、獲得掃描時間和掃描地點:
根據(jù)所述訪問網(wǎng)址url跳轉(zhuǎn)到相應(yīng)的防偽網(wǎng)站,利用所述防偽網(wǎng)站提供的查詢功能獲得掃描時間和由經(jīng)緯度信息構(gòu)成的掃描地點;并從待驗證二維碼中提取待驗證溯源碼;由所述掃描時間、掃描地點和待驗證溯源碼形成一條掃碼記錄并存入掃碼數(shù)據(jù)庫中;
步驟四、判斷所述待驗證溯源碼的真?zhèn)危?/p>
將所述待驗證溯源碼與所述防偽數(shù)據(jù)庫中的溯源碼進行一一比對,若比對成功,則獲得所述待驗證溯源碼為溯源碼ri,并執(zhí)行步驟五,否則,表示所述待驗證二維碼為偽碼;
步驟五、判斷所述待檢驗驗證碼的真?zhèn)危?/p>
根據(jù)所述溯源碼ri從所述防偽數(shù)據(jù)庫中獲得相應(yīng)的第i個y位驗證碼;將所述待檢驗驗證碼與所述第i個y位驗證碼進行比對,若比對成功,則表示所述待驗證二維碼為真碼;否則,所述待驗證二維碼為偽碼。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
1、本發(fā)明通過利用隨機函數(shù)隨機生成碼的方法生成一種復(fù)雜的難以被仿造的二維碼,保證每一個生成的二維碼的唯一性和隨機性,增加了二維碼被解析的難度,解決了現(xiàn)有技術(shù)中二維碼容易被復(fù)制與重復(fù)使用的問題;
2、本發(fā)明通過掃碼工具掃描,利用url網(wǎng)址在手機瀏覽器或者其他內(nèi)置瀏覽器軟件中顯示,解決現(xiàn)有技術(shù)中需要用戶下載特定的手機客戶端并安裝的問題,不需要手動輸入,提高了用戶體驗度,增加便捷性;
3、本發(fā)明通過現(xiàn)有技術(shù)中相對穩(wěn)定的windows系統(tǒng)平臺和成熟的c#語言開發(fā)技術(shù),保證了生成二維碼的穩(wěn)定性和高效性,從而能夠快速穩(wěn)定的生成大數(shù)據(jù)量的二維碼;
4、本發(fā)明通過隨機函數(shù)隨機生成溯源碼、驗證碼,溯源碼、驗證碼都具有隨機性,沒有可循的規(guī)律,使得無法按照規(guī)律進行大批量偽造,提高了二維碼的特殊性和難偽造性;
5、本發(fā)明通過掃描產(chǎn)品二維碼,層層與數(shù)據(jù)庫比對驗證碼、前綴碼和溯源碼,多重驗證,三重防偽保障,提高了產(chǎn)品二維碼的真實可靠性,防偽手段復(fù)雜、防偽系數(shù)高,解決了現(xiàn)有技術(shù)中通過一個驗證碼驗證產(chǎn)品的真?zhèn)?、方法單一,防偽手段簡單的問題;
6、本發(fā)明通過記錄統(tǒng)計掃碼時間、次數(shù)和掃描地點,能夠查詢掃碼產(chǎn)品的最終銷售信息,對于不法分子復(fù)制偽造正品的溯源碼,通過掃碼次數(shù)和計算不同掃碼地點之間的距離最大值,準確嚴謹?shù)呐卸ǘS碼是否被復(fù)制偽造以及復(fù)制偽造嚴重程度,對復(fù)制偽造程度進行風險等級預(yù)警,并合理的給出相應(yīng)的解決方案,提高基于二維碼的防偽可靠性。
附圖說明
圖1是本發(fā)明判定待驗證二維碼防偽驗證方法流程圖;
圖2是本發(fā)明利用二維碼的防偽驗證方法流程圖。
具體實施方式
本實施例中,一種二維碼的生成方法是按如下步驟進行:
步驟1、定義變量i,初始化i=1;
步驟2、批量生成溯源碼;
步驟2.1、利用式(1)獲取溯源碼的區(qū)間長度rl;
式(1)中,l表示溯源碼的長度;n表示生成溯源碼的個數(shù),rmax表示隨機函數(shù)rand()的最大值;
假設(shè)溯源碼的長度l=9,則溯源碼是從000000000到99999999之間產(chǎn)生,即可最多生成1000000000個溯源碼;假設(shè)產(chǎn)品需要生成10萬個溯源碼,即n=100000,則通過式(1)計算區(qū)間長度
步驟2.2、利用式(2)生成第i個溯源碼ri:
ri=(i-1)×rl+rand(rl)1≤i≤n(2)
本實施例中,當i=1時,假設(shè)rand(10000)=3472,則根據(jù)式(2)得第一個溯源碼r1=000003472,通過循環(huán)計算獲得n=100000個溯源碼{r1,r2,r3,...,ri,...,r100000},由于i的不同,生成的溯源碼也各不相同;產(chǎn)品偽造的溯源碼與溯源碼ri相同的概率為
步驟3、生成前綴碼;
設(shè)置訪問網(wǎng)址url和自定義參數(shù),由訪問網(wǎng)址url和自定義參數(shù)構(gòu)成前綴碼;訪問網(wǎng)址url為掃描二維碼后對應(yīng)跳轉(zhuǎn)界面的網(wǎng)址,自定義參數(shù)是根據(jù)用戶需求添加參數(shù);如本實例中前綴碼為http://www.seediot.com/sy.html?m=48600147-500001145q,其中訪問網(wǎng)址url為http://www.seediot.com/sy.html,自定義參數(shù)由企業(yè)組織機構(gòu)代碼48600147-5、傳輸參數(shù)m、品種代碼00001和日期代碼145q組成,145q代表2014年5月26日;
步驟4、生成y位驗證碼;
步驟4.1、設(shè)置一維數(shù)組arr[];
定義一維數(shù)組arr[]的長度為l;在本實例中,一維數(shù)組arr[]的元素是由二十六個大小寫字母和十位阿拉伯數(shù)字組成,則一維數(shù)組arr[]的長度l=62;將二十六個大小寫字母和十位阿拉伯數(shù)字按照順序依次存入一維數(shù)組arr[]中,即arr[0]=a,arr[1]=b,arr[2]=c,…,arr[60]=8,arr[61]=9;
步驟4.2、利用隨機函數(shù)rand(l)生成一個隨機數(shù)m;由隨機數(shù)m獲得一維數(shù)組arr[]中第m-1個元素arr[m-1];1≤m≤l;在本實例中,假設(shè)利用隨機函數(shù)rand(62)生成的隨機數(shù)m=3,則相應(yīng)的一維數(shù)組arr[m-1]表示一維數(shù)組arr[]中第2個元素arr[2]=c;
步驟4.3、重復(fù)執(zhí)行y次步驟4.2,從而獲得第i個溯源碼ri對應(yīng)的y位驗證碼;本實例中取y為4,重復(fù)執(zhí)行4次步驟4.2,假設(shè)當i=1時得到的四位驗證碼為c2a1,與步驟2中生成的溯源碼r1相對應(yīng),進一步增加防偽的強度;
步驟5、將第i個溯源碼ri、前綴碼和y位驗證碼存入防偽數(shù)據(jù)庫中,并將第i個溯源碼ri和前綴碼進行合并后利用條碼生成器生成第i個初始二維碼,將y位驗證碼嵌入所述第i個初始二維碼的中間位置,從而形成第i個二維碼;本實施例中,假設(shè)當i=1時,第一個初始二維碼為http://www.seediot.com/sy.html?m=48600147-500001145q000003472,利用現(xiàn)有條碼生成器工具,將y位驗證碼c2a1嵌入初始二維碼的中間位置,從而形成第i=1個二維碼;
步驟6、將i+1賦值給i并返回步驟2.2執(zhí)行,直到獲得n個二維碼,本實例中,需要循環(huán)執(zhí)行1000000次,最終得到需要的1000000個二維碼。
如圖1所示,一種二維碼的防偽驗證方法是按如下步驟進行:
步驟1、初步判斷待驗證二維碼的真?zhèn)危?/p>
判斷待驗證二維碼的中間位置是否包含待檢驗驗證碼;若不包含,則表示待驗證二維碼為偽碼,否則對待驗證二維碼進行掃描,獲得待驗證二維碼的掃描結(jié)果,判斷掃描結(jié)果是否包含訪問網(wǎng)址url,若沒有包含,則表示待驗證二維碼為偽碼;否則,讀取掃描結(jié)果中的待驗證溯源碼并執(zhí)行步驟2;
具體實施中,首先通過肉眼觀察待驗證二維碼中間位置是否有四位的驗證碼,將不包含四位驗證碼的待驗證二維碼判定為偽碼初步過濾,對包含四位驗證碼的待驗證二維碼進行掃描,如果不能夠跳轉(zhuǎn)到訪問網(wǎng)址url對應(yīng)的防偽網(wǎng)站http://www.seediot.com/sy.html,則表示待驗證二維碼不包含訪問網(wǎng)址url,判定為偽碼并過濾;
步驟2、獲得掃描時間和掃描地點:
根據(jù)訪問網(wǎng)址url跳轉(zhuǎn)到相應(yīng)的防偽網(wǎng)站,利用防偽網(wǎng)站提供的查詢功能獲得掃描時間和由經(jīng)緯度信息構(gòu)成的掃描地點,本實例是利用html5界面中g(shù)eolocation函數(shù)獲取經(jīng)緯度并從待驗證二維碼http://www.seediot.com/sy.html?m=48600147-500001145q000003472中提取待驗證溯源碼000003472;由掃描時間、掃描地點和待驗證溯源碼形成一條掃碼記錄并存入掃碼數(shù)據(jù)庫中;
步驟3、判斷待驗證溯源碼的真?zhèn)危?/p>
將待驗證溯源碼與防偽數(shù)據(jù)庫中的溯源碼進行一一比對,若比對成功,則獲得待驗證溯源碼為溯源碼ri,并執(zhí)行步驟4,否則,表示待驗證二維碼為偽碼;假設(shè)當i=1時,待驗證溯源碼為000003472,通過與防偽數(shù)據(jù)庫中溯源碼進行一一比對,找到溯源碼r1=000003472,則待驗證溯源碼為r1;
步驟4、判斷待檢驗驗證碼的真?zhèn)危?/p>
根據(jù)溯源碼ri從防偽數(shù)據(jù)庫中獲得相應(yīng)的第i個y位驗證碼;將待檢驗驗證碼與第i個y位驗證碼進行比對,若比對成功,則表示待驗證二維碼為真碼;否則,待驗證二維碼為偽碼;
假設(shè)當i=1時,待驗證驗證碼為c2a1,通過溯源碼r1=000003472從防偽數(shù)據(jù)庫中獲得相應(yīng)的第1個四位驗證碼c2a1,與待檢驗驗證碼比對成功,表示二維碼為真碼。
如圖2所示,一種利用二維碼的防偽驗證方法,是利用溯源碼ri并按如下步驟進行風險預(yù)警:
步驟1、本實例中將風險預(yù)警分為三個等級:輕度風險預(yù)警,中度風險預(yù)警,重度風險預(yù)警;不同等級風險預(yù)警設(shè)置掃碼次數(shù)閾值k的值不同,如設(shè)定輕度風險預(yù)警掃碼次數(shù)閾值k為2,中度風險預(yù)警掃碼次數(shù)閾值k為50,重度風險預(yù)警掃碼次數(shù)閾值k為100;統(tǒng)計溯源碼ri在掃碼數(shù)據(jù)庫中的掃碼記錄,獲得溯源碼ri的掃碼次數(shù)j,假定j為56,并將掃碼次數(shù)j與所設(shè)定的掃碼次數(shù)閾值k進行比較,其中k≥2,j=56>k=50;在掃碼次數(shù)j超過掃碼次數(shù)閾值k時,執(zhí)行步驟2;
步驟2、由于存在個人多次掃描的情況,故對于在小于一定距離的多次掃碼不進行風險預(yù)警;具體實施中根據(jù)溯源碼ri的掃碼記錄,獲得溯源碼ri的所有掃描地點的經(jīng)緯度信息,假定其中一個掃描地點為a點,另一個掃描地點為b點,aj表示a點的經(jīng)度,aw表示a點的緯度,bj表示b點的經(jīng)度,bw表示b點的緯度,根據(jù)式(3)計算a點與b點之間的距離d的值,根據(jù)式(3)計算由經(jīng)緯度信息獲得所有掃描地點之間的距離值d,選出最大的距離值,假設(shè)距離最大值為5000m,距離閾值為500m,并與所設(shè)定的距離閾值進行比較,當最大的距離值超出距離閾值時進行風險預(yù)警;
本實例中,最大距離值5000大于距離閾值500,根據(jù)步驟1中的掃碼次數(shù)50≤j=56<100和風險預(yù)警等級,最終防偽驗證的判定結(jié)果為進行中度風險預(yù)警。