王耀魯 中國水利水電科學研究院

vote_info數(shù)據(jù)表

id_number數(shù)據(jù)表

ip_info數(shù)據(jù)表
在前端實現(xiàn)層將通過調用js函數(shù),來審核投票者輸入的身份證號碼是否正確,在該過程中js程序將通過獲取表單中的input 的name為id的text文本輸入框,賦值給變量id。通過建立三個數(shù)組來存放驗證身份證號碼的數(shù)據(jù)。并調用toUpperCase()函數(shù)將變量id的英文字母轉換大小寫,以便存入數(shù)據(jù)庫前對身份證信息進行驗證。通過身份證號碼驗證是否具有10個字符,若沒有10個字符,就顯示“身份證號碼必須是10位”。檢查身份證號碼的第一位是否是大寫這部分用來驗證身份證信息是否符合標準的身份證信息,若不是就顯示身份證號碼第一位是英文字母,同時還需驗證身份證號碼的命名規(guī)則必須是10位、首字符位大寫英文字母除外,還有個非常重要的命名規(guī)則,就是身份證號碼第2~10位必須為數(shù)字。此外還必須采用身份驗證的公式來計算處理數(shù)字,并用變量來存放這些數(shù)據(jù)。

在后臺PHP邏輯處理層,通過獲取首頁的index.php表單中的身份證號碼(id)及候選人姓名(name),調用strtoupper()函數(shù)將$id變量中所獲取的英文字母轉換成大寫。本方案中為投票人惡意重復刷票,需保證投票人信息的唯一性。使用身份證號碼、ip地址來進行雙驗證,一方面需考慮變量id與vote數(shù)據(jù)庫id_number數(shù)據(jù)表的id字段進行對比,若有一樣的身份證號碼表示已經(jīng)投過票,就不再投票了;若沒有一樣的身份證號碼,變量id的值寫入vote數(shù)據(jù)庫,并通過ip()函數(shù)驗證客戶機是否使用代理,對客戶訪問的ip進行控制,獲取ip地址后,查詢ip_info字符串,判斷ip地址是否真實存在,只有當兩張表中的id、ip兩個字段都不存在時,才可以將投的票數(shù)+1的結果存入vote數(shù)據(jù)庫,并更新vote_info數(shù)據(jù)表中數(shù)據(jù)。

Js判斷邏輯層流程

分析實現(xiàn)方案,目前系統(tǒng)還存在投票過程中,身份證號可任意提供無驗證的問題。根據(jù)vote數(shù)據(jù)庫中的表結構,未來將使用人事信息庫中與vote庫中的id_number表的進行關聯(lián),實現(xiàn)1:1關聯(lián)關系。將考慮加入人事表導入功能,并在庫中建number_ip_info表,增加投票系統(tǒng)的可擴展性。
結語:本系統(tǒng)主要針對于小型公司或團體內(nèi)解決內(nèi)部投票難所提出的一種方案,能在一定的程度下解決小型企業(yè)人員投票困難的問題,本系統(tǒng)還存在一定程度不足和改進的空間,希望各界同行能批評指正,共同探討。