王耀魯 中國水利水電科學(xué)研究院
vote_info數(shù)據(jù)表
id_number數(shù)據(jù)表
ip_info數(shù)據(jù)表
在前端實(shí)現(xiàn)層將通過調(diào)用js函數(shù),來審核投票者輸入的身份證號(hào)碼是否正確,在該過程中js程序?qū)⑼ㄟ^獲取表單中的input 的name為id的text文本輸入框,賦值給變量id。通過建立三個(gè)數(shù)組來存放驗(yàn)證身份證號(hào)碼的數(shù)據(jù)。并調(diào)用toUpperCase()函數(shù)將變量id的英文字母轉(zhuǎn)換大小寫,以便存入數(shù)據(jù)庫前對(duì)身份證信息進(jìn)行驗(yàn)證。通過身份證號(hào)碼驗(yàn)證是否具有10個(gè)字符,若沒有10個(gè)字符,就顯示“身份證號(hào)碼必須是10位”。檢查身份證號(hào)碼的第一位是否是大寫這部分用來驗(yàn)證身份證信息是否符合標(biāo)準(zhǔn)的身份證信息,若不是就顯示身份證號(hào)碼第一位是英文字母,同時(shí)還需驗(yàn)證身份證號(hào)碼的命名規(guī)則必須是10位、首字符位大寫英文字母除外,還有個(gè)非常重要的命名規(guī)則,就是身份證號(hào)碼第2~10位必須為數(shù)字。此外還必須采用身份驗(yàn)證的公式來計(jì)算處理數(shù)字,并用變量來存放這些數(shù)據(jù)。
在后臺(tái)PHP邏輯處理層,通過獲取首頁的index.php表單中的身份證號(hào)碼(id)及候選人姓名(name),調(diào)用strtoupper()函數(shù)將$id變量中所獲取的英文字母轉(zhuǎn)換成大寫。本方案中為投票人惡意重復(fù)刷票,需保證投票人信息的唯一性。使用身份證號(hào)碼、ip地址來進(jìn)行雙驗(yàn)證,一方面需考慮變量id與vote數(shù)據(jù)庫id_number數(shù)據(jù)表的id字段進(jìn)行對(duì)比,若有一樣的身份證號(hào)碼表示已經(jīng)投過票,就不再投票了;若沒有一樣的身份證號(hào)碼,變量id的值寫入vote數(shù)據(jù)庫,并通過ip()函數(shù)驗(yàn)證客戶機(jī)是否使用代理,對(duì)客戶訪問的ip進(jìn)行控制,獲取ip地址后,查詢ip_info字符串,判斷ip地址是否真實(shí)存在,只有當(dāng)兩張表中的id、ip兩個(gè)字段都不存在時(shí),才可以將投的票數(shù)+1的結(jié)果存入vote數(shù)據(jù)庫,并更新vote_info數(shù)據(jù)表中數(shù)據(jù)。
Js判斷邏輯層流程
分析實(shí)現(xiàn)方案,目前系統(tǒng)還存在投票過程中,身份證號(hào)可任意提供無驗(yàn)證的問題。根據(jù)vote數(shù)據(jù)庫中的表結(jié)構(gòu),未來將使用人事信息庫中與vote庫中的id_number表的進(jìn)行關(guān)聯(lián),實(shí)現(xiàn)1:1關(guān)聯(lián)關(guān)系。將考慮加入人事表導(dǎo)入功能,并在庫中建number_ip_info表,增加投票系統(tǒng)的可擴(kuò)展性。
結(jié)語:本系統(tǒng)主要針對(duì)于小型公司或團(tuán)體內(nèi)解決內(nèi)部投票難所提出的一種方案,能在一定的程度下解決小型企業(yè)人員投票困難的問題,本系統(tǒng)還存在一定程度不足和改進(jìn)的空間,希望各界同行能批評(píng)指正,共同探討。