廖珊 陽(yáng)利鋒
摘 ? 要:隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,博物館作為一個(gè)為社會(huì)發(fā)展服務(wù)的、向公眾開(kāi)放的非營(yíng)利性常設(shè)機(jī)構(gòu),引進(jìn)先進(jìn)的移動(dòng)信息技術(shù),實(shí)現(xiàn)在線預(yù)約參館已成為必然的趨勢(shì)。本文結(jié)合地質(zhì)博物館的實(shí)際情況,開(kāi)發(fā)了基于微信公眾號(hào)的預(yù)約系統(tǒng),實(shí)現(xiàn)了門票預(yù)約、二維碼票據(jù)生成、票據(jù)驗(yàn)證等一系列功能,提高了工作效率,降低了管理成本,改善了公眾的參館體驗(yàn)。
關(guān)鍵詞:移動(dòng)互聯(lián)網(wǎng) ?預(yù)約系統(tǒng) ?二維碼票據(jù) ?末位校驗(yàn)碼 ?加密解密
中圖分類號(hào):TP311 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào):1674-098X(2019)08(a)-0134-02
1 ?背景
微信作為中國(guó)使用最多的實(shí)時(shí)通訊工具,與我們每個(gè)人的線上線下生活息息相關(guān)。而微信,卻不止于用戶社交這一功能。博物館傳統(tǒng)的預(yù)約方式落后且低效,官網(wǎng)預(yù)約、APP等方式又略顯復(fù)雜,結(jié)合微信公眾號(hào)建設(shè)在線預(yù)約系統(tǒng)成了最佳選擇。
公眾無(wú)須到現(xiàn)場(chǎng)取票,關(guān)注博物館微信公眾號(hào),輕松點(diǎn)擊即可預(yù)約,同時(shí)系統(tǒng)展示各時(shí)段預(yù)約情況,用戶可錯(cuò)開(kāi)高峰預(yù)約,改善參館體驗(yàn)。
2 ?系統(tǒng)總體設(shè)計(jì)
系統(tǒng)架構(gòu)采用純B/S模式,該模式具有易于部署、維護(hù)、升級(jí)且對(duì)硬件需求不高等優(yōu)點(diǎn)。系統(tǒng)開(kāi)發(fā)采用.NET Framework 4.5+HTML5架構(gòu),數(shù)據(jù)庫(kù)為SQL Server,采用MVC(Model View Controller)分層設(shè)計(jì)模式,將業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離,將業(yè)務(wù)邏輯聚集到業(yè)務(wù)層,簡(jiǎn)化了分組開(kāi)發(fā)。本系統(tǒng)數(shù)據(jù)層使用EF(Entity Framework),EF框架是微軟的.NET中ORM(對(duì)象關(guān)系映射)框架,在EF框架中把數(shù)據(jù)庫(kù)中的關(guān)系表對(duì)應(yīng)到了程序中的實(shí)體類,把數(shù)據(jù)表中的字段對(duì)應(yīng)成了實(shí)體類中的屬性。
二維碼作為一種新的信息存儲(chǔ)和傳遞技術(shù),從誕生之時(shí)就受到了廣泛關(guān)注和應(yīng)用。電子票據(jù)為在線自動(dòng)生成的二維碼圖片,集成了用戶的預(yù)約信息及校驗(yàn)碼。用戶進(jìn)場(chǎng)時(shí)出示二維碼票據(jù),二維碼掃描儀掃描票據(jù)后還原預(yù)約信息進(jìn)行真?zhèn)悟?yàn)證、可用性驗(yàn)證并記錄入場(chǎng)信息。
3 ?關(guān)鍵技術(shù)
3.1 門票庫(kù)存自動(dòng)生成
利用SQL Server代理建立自動(dòng)庫(kù)存生成作業(yè),數(shù)據(jù)庫(kù)自動(dòng)在計(jì)劃時(shí)間點(diǎn)生成門票的庫(kù)存數(shù)據(jù),SQL語(yǔ)句如下。
3.2 門票預(yù)約并發(fā)處理
同一時(shí)間或者同一時(shí)刻多個(gè)訪問(wèn)者同時(shí)訪問(wèn)某一更新操作時(shí),會(huì)產(chǎn)生并發(fā),本系統(tǒng)中很重要的一個(gè)問(wèn)題就是要處理好數(shù)據(jù)庫(kù)并發(fā),即多人同時(shí)在線預(yù)約時(shí)對(duì)門票庫(kù)存進(jìn)行準(zhǔn)確處理。
數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)在庫(kù)存表中增加一列,字段名為VersionNum,數(shù)據(jù)類型為時(shí)間戳(TimeStamp),如圖2所示。
字段VersionNum可以理解為版本號(hào),它的作用是一旦有訪問(wèn)者修改數(shù)據(jù)了,該條記錄的數(shù)據(jù)、版本號(hào)的值就會(huì)相應(yīng)發(fā)生改變。版本號(hào)的同步更改是和數(shù)據(jù)庫(kù)產(chǎn)品相關(guān)的,在SQL Server中會(huì)隨著數(shù)據(jù)的修改自動(dòng)同步更新版本號(hào)。相對(duì)于數(shù)據(jù)庫(kù)中的并發(fā)處理方式,Entity Framework中的并發(fā)處理方式進(jìn)行了不少簡(jiǎn)化。在System.Data.Metadata.Edm 命名空間中,存在ConcurencyMode 枚舉,用于指定概念模型中的屬性的并發(fā)選項(xiàng)。ConcurencyMode有兩個(gè)成員:None表示在寫入時(shí)從不驗(yàn)證此屬性,這是默認(rèn)的并發(fā)模式;Fixed表示在寫入時(shí)始終驗(yàn)證此屬性。當(dāng)模型屬性為Fixed時(shí),系統(tǒng)會(huì)對(duì)此模型屬性進(jìn)行檢測(cè),當(dāng)同一個(gè)時(shí)間對(duì)屬性進(jìn)行修改時(shí),系統(tǒng)就會(huì)激發(fā)OptimisticConcurrencyException 異常。在EF DataBaseFirst中我們只需要將模型中“VersionNum”字段的“并發(fā)模式”屬性修改為“Fixed”即可。當(dāng)系統(tǒng)發(fā)生并發(fā)時(shí),程序會(huì)拋出“DbUpdateConcurrencyException”異常,我們捕獲這個(gè)異常后再按照自己的規(guī)則,重復(fù)執(zhí)行請(qǐng)求的方法,直至返回成功為止。
3.3 票據(jù)數(shù)據(jù)加密解密
二維碼票據(jù)的本質(zhì)就是一段文本信息,如“預(yù)約人信息+預(yù)約日期+預(yù)約時(shí)段+其他信息”,為了防止不法人員仿制生成非法票據(jù),該信息在生成二維碼之前必須進(jìn)行加密,然后在游客進(jìn)館時(shí),系統(tǒng)通過(guò)二維碼掃描器識(shí)別二維碼獲取加密字符串,再對(duì)字符串進(jìn)行解密獲取原始票據(jù)信息。加密技術(shù)通常分為兩大類:“對(duì)稱式”和“非對(duì)稱式”。根據(jù)本系統(tǒng)的應(yīng)用場(chǎng)景,選取對(duì)稱式加密算法DES(Data Encryption Standard)進(jìn)行加密,同時(shí)為了提高游客進(jìn)場(chǎng)驗(yàn)票速度,加密密鑰設(shè)計(jì)為8位字符。
3.4 末位校驗(yàn)碼
為了進(jìn)一步提升驗(yàn)票速度,本系統(tǒng)引入末位校驗(yàn)碼技術(shù),對(duì)加密后的字符串進(jìn)行ASCII轉(zhuǎn)碼后,通過(guò)反復(fù)自加得到個(gè)位數(shù)作為校驗(yàn)碼追加到字符串尾部,進(jìn)場(chǎng)驗(yàn)證時(shí),通過(guò)末位檢驗(yàn)碼可快速進(jìn)行初始真?zhèn)闻袛?。具體算法如下。
4 ?結(jié)語(yǔ)
本文在微信公眾號(hào)的基礎(chǔ)上,利用移動(dòng)互聯(lián)網(wǎng)及業(yè)界較新的技術(shù),結(jié)合博物館的實(shí)際需求,設(shè)計(jì)并開(kāi)發(fā)了一個(gè)功能完善且十分穩(wěn)定的在線預(yù)約系統(tǒng),該系統(tǒng)完成了從線上預(yù)約到線下驗(yàn)證參館一整套完整的流程,并通過(guò)實(shí)踐證明了該平臺(tái)的穩(wěn)定性和可靠性。
參考文獻(xiàn)
[1] 王曉影. 基于移動(dòng)GIS的掌上預(yù)約服務(wù)系統(tǒng)及相關(guān)技術(shù)研究[D].遼寧工程技術(shù)大學(xué),2017.
[2] 蔣菡,茅艷.淺談二維碼識(shí)別技術(shù)在博物館中的應(yīng)用[J].蘇州文博論叢,2012(15):217-220.
[3] 李陶.首都博物館免票網(wǎng)上預(yù)約系統(tǒng)及其作用[J].首都博物館叢刊,2010(20):436-443.
[4] 譚松榮,王偉.淺談大用戶量高并發(fā)移動(dòng)互聯(lián)網(wǎng)系統(tǒng)的性能優(yōu)化[J].計(jì)算機(jī)產(chǎn)品與流通,2019(2):137.
[5] 徐小平.基于手機(jī)二維碼的電子票據(jù)服務(wù)系統(tǒng)設(shè)計(jì)[J].電腦與電信,2008(12):76-78.
[6] 王對(duì),韓盛.基于AES加密算法的二維碼防偽系統(tǒng)[J].電腦知識(shí)與技術(shù),2019,15(11):64-66.
[7] 趙海.基于加密二維碼的隱私保護(hù)技術(shù)研究與實(shí)現(xiàn)[D].西安電子科技大學(xué),2018.