|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教門禁考勤系統(tǒng)有效卡識別算法 |
| 作者:zhaoem82 欄目:單片機 |
我在做門禁考勤系統(tǒng)系統(tǒng)時遇到如何快速識別有效卡的問題, 我現(xiàn)在的方法是將有效卡號存放在FLASH中,每次讀到卡時從FLASH讀出卡號比較, 能在FLASH中找到表示該卡號已經(jīng)授權(quán),沒找到為非法卡. 我現(xiàn)在測試用順序查找方法查找,1000張卡的查找速度要差不多4秒,顯然大慢了, 請問大家有什么好查找算法,謝謝! |
| 2樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 9:08:00 發(fā)布:
能不能對卡號排序 我想將卡號進行排序存放在falsh中,然后用二分法查找,但卡號存在falsh中排序 速度好慢,每次對卡進行授權(quán)操作時都可能要對FLASH中存放的卡號進行大規(guī)模 的移動. |
|
| 3樓: | >>參與討論 |
| 作者: IC1008 于 2007/1/11 9:08:00 發(fā)布:
如果將卡的號碼先進行順序排列 然后進行折半查找 就可以查到了 基本上查找10張卡就可以達(dá)到目標(biāo) |
|
| 4樓: | >>參與討論 |
| 作者: IC1008 于 2007/1/11 9:16:00 發(fā)布:
錄入的機會是很少的 或者再建一個儲存數(shù)組 專門來記錄排名的 數(shù)組的pm[0]= 最小卡的儲存位置 |
|
| 5樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 9:47:00 發(fā)布:
這樣查找判別應(yīng)該可以 不過授權(quán)操作時就要對儲存數(shù)組進行排序,因為FLASH讀寫操作比較慢,可能花費時間比較長,如果一次授權(quán)的卡號比較多的話可能等待的時間較長, |
|
| 6樓: | >>參與討論 |
| 作者: IC1008 于 2007/1/11 10:11:00 發(fā)布:
在RAM中建立一個排序儲存數(shù)組的影像 修改RAM內(nèi)容 空閑時候才寫入ROM |
|
| 7樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 10:18:00 發(fā)布:
我用的是STC89C516RD只有1K的內(nèi)部RAM 沒有這么多的空間,現(xiàn)在要求要保存1K張有效卡就要2K字節(jié)的空間作儲存數(shù)組的影像 才行,每個地址空間要2個字節(jié). |
|
| 8樓: | >>參與討論 |
| 作者: xwj 于 2007/1/11 10:23:00 發(fā)布:
一般都是PC端授權(quán),排序的工作可以交給電腦來進行 當(dāng)然,這就需要傳輸全部數(shù)據(jù),可能會導(dǎo)致傳輸時間過長! 自己看著辦吧 |
|
| 9樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 10:33:00 發(fā)布:
這也是個好辦法! |
|
| 10樓: | >>參與討論 |
| 作者: btiger2000 于 2007/1/11 13:23:00 發(fā)布:
一定要存卡號么? 我們處理的一種做法! 一個位對應(yīng)一張卡,1000張卡125字節(jié)就夠! 比如卡號是1---1000,每個字節(jié)對應(yīng)8張卡,即1--8號的卡存儲器0字節(jié),以此類推。授權(quán)的位置1,未授權(quán)的位清0, 查詢的時候 (卡號-1)/8 得到字節(jié),(卡號-1)%8得到位! 很快的!當(dāng)然卡號需要有規(guī)律! |
|
| 11樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 13:34:00 發(fā)布:
btiger2000大俠,小弟不是好明白,能說清禁點?謝謝! |
|
| 12樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 13:38:00 發(fā)布:
我們的門禁系統(tǒng)使用的時候卡號可能沒有什么規(guī)律 |
|
| 13樓: | >>參與討論 |
| 作者: lyjian 于 2007/1/11 13:46:00 發(fā)布:
設(shè)置有規(guī)律的卡號,通過卡號查找授權(quán)的信息 |
|
| 14樓: | >>參與討論 |
| 作者: emailli 于 2007/1/11 13:48:00 發(fā)布:
這樣的 btiger2000的意思是這樣的: 125B用來保存卡的授權(quán)情況。 為什么125B呢?因為 125B*8=1000b 也就是一共有1000位。 那么對應(yīng)位為1就表明卡已經(jīng)授權(quán),否則為未授權(quán)。 這樣方法處理的關(guān)鍵就是,如何最快的將卡號信息和你的位標(biāo)識信息最快的對應(yīng)起來?需要你根據(jù)你的卡號的規(guī)律做一個分析,然后做處理。最好就是移位或者與或幾次后就可以獲得你的“卡號--位”對應(yīng)信息。 以上理解,不知道是否得當(dāng)? |
|
| 15樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 13:53:00 發(fā)布:
我們的機器是賣給別人裝的 我們不可能要求別人用有規(guī)律的卡號,或者后來加卡也不一定能找到有有規(guī)律的卡號的卡,這樣可能行不通 |
|
| 16樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 13:57:00 發(fā)布:
懇請大俠們幫忙分析 |
|
| 17樓: | >>參與討論 |
| 作者: emailli 于 2007/1/11 14:15:00 發(fā)布:
發(fā)一些卡號看看咯 你至少得把你的卡號發(fā)一些上來給大家看看吧。 一點規(guī)律都沒有的東西那你只有改硬件增加RAM來做了。 |
|
| 18樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 14:27:00 發(fā)布:
卡號是這樣的 我們的門禁系統(tǒng)要兼容市面上的ID卡,即卡號沒規(guī)律我們?nèi)】ㄌ柺?字節(jié)十進制數(shù),格式如下: 02062074,02039418 |
|
| 19樓: | >>參與討論 |
| 作者: xwj 于 2007/1/11 14:28:00 發(fā)布:
門禁一般用的是最便宜的ID卡,卡號為8位或18位十進制不重復(fù)值 卡號不是自己能修改的 |
|
| 20樓: | >>參與討論 |
| 作者: stycx 于 2007/1/11 14:31:00 發(fā)布:
排序并增加授權(quán)特征位 每次購進新卡時全部加一位授權(quán)特征位后排序?qū)懭?a target="_blank" href="http://m.58mhw.cn/stock-ic/FLASH.html">FLASH。 用授權(quán)特征位標(biāo)示是否有效卡。 以后授權(quán)只須修改該卡特征位,無須再排序。 |
|
| 21樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 14:35:00 發(fā)布:
ID卡號能自己修改嗎? 這樣門禁系統(tǒng)不是一點安全性都沒有了,隨便找張卡改改就能開門,不會是這樣吧,好像是卡號是出廠時就固化了不能修改.你所說的是不是IC卡,IC卡就能修改,ID卡不行 |
|
| 22樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 14:43:00 發(fā)布:
回21樓,這樣可能靈活性就差了 如果用戶后來要追加添卡也一樣要重新排序,還有機器買出后可能就很難控制使用者怎樣使用了,你沒可能叫用戶買一大批卡待用,最多只能叫他多要一點備用,還是有可能要追加添卡的 |
|
| 23樓: | >>參與討論 |
| 作者: xwj 于 2007/1/11 14:48:00 發(fā)布:
呵呵,21樓明顯的外行,別理他 |
|
| 24樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 14:58:00 發(fā)布:
沒關(guān)系,同樣感謝他! |
|
| 25樓: | >>參與討論 |
| 作者: IC1008 于 2007/1/11 14:59:00 發(fā)布:
還是采用我說的方法吧 A儲存空間進行儲存卡信息,不用排序的 B儲存空間存儲排序信息 增加一個卡信息,只需要在A空間末端增加卡信息 對B儲存空間要進行更新,沒有辦法 在排序空間每個卡占用兩個字節(jié)的信息 |
|
| 26樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/11 15:05:00 發(fā)布:
還是這方法有效,謝謝IC1008! |
|
| 27樓: | >>參與討論 |
| 作者: xwj 于 2007/1/11 15:09:00 發(fā)布:
嗯,分為批量授權(quán)和少量補充授權(quán),確實是個好辦法 |
|
| 28樓: | >>參與討論 |
| 作者: qinyp 于 2007/1/11 22:12:00 發(fā)布:
re 可以將卡號轉(zhuǎn)為16進制,不必全部保存,一般根據(jù)低字節(jié)(如3個字節(jié),或者再少點,比如20位、18位等),再用位存儲判斷的方法即可,這樣兩張卡占據(jù)一個位的概率還是很小的,關(guān)鍵是判斷比較快,讀卡號、計算、讀一個FLASH字節(jié)、判斷字節(jié)中某位即可 |
|
| 29樓: | >>參與討論 |
| 作者: IceAge 于 2007/1/12 0:52:00 發(fā)布:
同意樓上qinyp的建議 去看看 harsh 算法以及 harsh table 吧,很出名的算法. |
|
| 30樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/12 9:50:00 發(fā)布:
好的,謝謝大家! |
|
| 31樓: | >>參與討論 |
| 作者: lypd96 于 2007/1/12 9:51:00 發(fā)布:
RE: 28樓的方法是好,但實際中不好用,如只保存1000張卡就可以了,一般每張卡保存4個字節(jié),只要4K字節(jié)存儲器就夠用了,但按28樓的方法即使每張卡保存18位,也就是要2的18次方=262144個位,要32768個字節(jié)才能保存. 樓主是只比較1000張卡,其實可以不用什么算法也就很快比完數(shù)據(jù),我做過實驗,就是保存了8000張卡(每張卡保存4個字節(jié)的數(shù)據(jù))在FLASH中,用51MCU,44MHZ的晶振,讀數(shù)據(jù)和比較完8000張也就用了不到1.5S的時間.方法就是(讀一個字節(jié)比較一個字節(jié),而不是一次讀完4個字節(jié)后再比較,比較數(shù)據(jù)時從最低一個字節(jié)的數(shù)據(jù)開始,這樣可以省下很多時間)先讀存儲器中保存的第一張卡的最低一個字節(jié)的數(shù)據(jù),而后和剛才讀到卡的數(shù)據(jù)最低一個字節(jié)比較相等,而后繼續(xù)讀卡剩下的字節(jié),一直到比完4個字節(jié)的數(shù)據(jù).只要其中一個字節(jié)不相等就直接讀存儲器中的第二張卡的數(shù)據(jù),一直到讀完8000張卡為止. * - 本貼最后修改時間:2007-1-12 9:56:18 修改者:lypd96 |
|
| 32樓: | >>參與討論 |
| 作者: zhaoem82 于 2007/1/12 10:14:00 發(fā)布:
這個也是好辦法! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |