?
?讀取身份證開發配置
function readerid魚住未來科技(){const webUrl = 'http://' + "127.0.0.1:30004" + '/api/info'$.ajax({url: webUrl,type: 'GET',dataType: 'json',success: function (result) {// processContent.text('web api接口:' + webUrl + ' 讀取身份證信息成功')const szparam = result身份證渲染_魚住未來科技(szparam);},error: function (jqXHR, textStatus, errorThrown) {// processContent.text('web api接口:' + webUrl + ' 讀取身份證失敗,原因:' + hex2a(window.atob(errorThrown)))alert("讀取身份證失敗"+ hex2a(window.atob(errorThrown)));}})}
身份證解析代碼?
function 身份證渲染_魚住未來科技(szparam){// alert(szparam.CardType);if (szparam.CardType == 74){// 切換背景圖片 83是臺灣cardFront.removeClass()cardBack.removeClass()cardFront.addClass('GAT-card')cardFront.addClass('card-hongkong-macao-taiwan-front')cardBack.addClass('GAT-card')let no = hex2a(window.atob(szparam.CardInfo.No))if (no && no.startsWith('83')){cardBack.addClass('card-taiwan-back')}else{cardBack.addClass('card-hongkong-macao-back')}strLog = '讀取 港澳臺居民居住證 成功\r\n';strLog += 'SN:' + szparam.CardInfo.SN + '\r\n';strLog += '中文名:' + hex2a(window.atob(szparam.CardInfo.Name)) + '\r\n';strLog += '證件號碼:' + no + '\r\n';strLog += '性別:' + hex2a(window.atob(szparam.CardInfo.Sex)) + '\r\n';strLog += '出生日期:' + hex2a(window.atob(szparam.CardInfo.Birthday)) + '\r\n';strLog += '民族:' + hex2a(window.atob(szparam.CardInfo.Nation)) + '\r\n';strLog += '地址:' + hex2a(window.atob(szparam.CardInfo.Address)) + '\r\n';strLog += '簽發機關:' + hex2a(window.atob(szparam.CardInfo.SignedDepartment)) + '\r\n';strLog += '開始日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin)) + '\r\n';strLog += '結束日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)) + '\r\n\r\n';strLog += '通行證號碼:' + hex2a(window.atob(szparam.CardInfo.OtherNO)) + '\r\n';strLog += '簽發次數:' + hex2a(window.atob(szparam.CardInfo.SignNum)) + '\r\n';//processContent.text(strLog)// 港澳臺通行證號碼console.log(szparam.CardInfo)// cardFront.find('.name').text(hex2a(window.atob(szparam.CardInfo.Name)))// cardFront.find('.sex').text(hex2a(window.atob(szparam.CardInfo.Sex)) ==='1'? '男':'女')const Birthday = hex2a(window.atob(szparam.CardInfo.Birthday))const birthArr = parseDateString(Birthday , ".", true).split(".")// cardFront.find('.year').text(birthArr[0])// cardFront.find('.month').text(birthArr[1])// cardFront.find('.date').text(birthArr[2])// cardFront.find('.address').text(hex2a(window.atob(szparam.CardInfo.Address)))// cardFront.find('.number').text(hex2a(window.atob(szparam.CardInfo.No)))// cardBack.find('.department').text(hex2a(window.atob(szparam.CardInfo.SignedDepartment)))const ValidityPeriodBegin = hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin))const ValidityPeriodEnd = hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)).trim()const expiryBegin = parseDateString(ValidityPeriodBegin, '.')const expiryEnd = ValidityPeriodEnd !== '長期' ? parseDateString(ValidityPeriodEnd, '.') : ValidityPeriodEnd// cardBack.find('.expiry').text( expiryBegin + '-' + expiryEnd)// cardBack.find('.pass-number').text( hex2a(window.atob(szparam.CardInfo.OtherNO)))}else if (szparam.CardType == 73){// 切換背景圖片 83是臺灣cardFront.removeClass()cardBack.removeClass()cardFront.addClass('WGR-card-1')cardFront.addClass('card-old-foreigner-front')cardBack.addClass('WGR-card-1')cardBack.addClass('card-old-foreigner-back')strLog = '讀取 外國人永久居留身份證(舊版) 成功\r\n';strLog += 'SN:' + szparam.CardInfo.SN + '\r\n';strLog += '中文名:' + hex2a(window.atob(szparam.CardInfo.Name)) + '\r\n';strLog += '英文名:' + hex2a(window.atob(szparam.CardInfo.EnName)) + '\r\n';strLog += '證件號碼:' + hex2a(window.atob(szparam.CardInfo.No)) + '\r\n';strLog += '性別:' + hex2a(window.atob(szparam.CardInfo.Sex)) + '\r\n';strLog += '出生日期:' + hex2a(window.atob(szparam.CardInfo.Birthday)) + '\r\n';strLog += '國籍:' + hex2a(window.atob(szparam.CardInfo.Country)) + '\r\n';strLog += '簽發機關:中華人民共和國移民管理局\r\n';strLog += '開始日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin)) + '\r\n';strLog += '結束日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)) + '\r\n\r\n';strLog += '版本號:' + hex2a(window.atob(szparam.CardInfo.Version)) + '\r\n';processContent.text(strLog)let name = hex2a(window.atob(szparam.CardInfo.Name))let enName = hex2a(window.atob(szparam.CardInfo.EnName))let nameText = enName + (name.trim()? ' / '+ name : '')// cardFront.find('.name').text(nameText)// cardFront.find('.sex').text(hex2a(window.atob(szparam.CardInfo.Sex)) === '1'? '男': '女')const Birthday = hex2a(window.atob(szparam.CardInfo.Birthday))const birthArr = parseDateString(Birthday , ".", true).split(".")cardFront.find('.year').text(birthArr.join('-')) //出生年月cardFront.find('.month').text(hex2a(window.atob(szparam.CardInfo.Country)))//國籍const ValidityPeriodBegin = hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin))const ValidityPeriodEnd = hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)).trim()const expiryBegin = parseDateString(ValidityPeriodBegin, '.')const expiryEnd = ValidityPeriodEnd !== '長期' ? parseDateString(ValidityPeriodEnd, '.') : ValidityPeriodEnd// cardFront.find('.date').text(expiryBegin + '-' + expiryEnd)// cardFront.find('.address').text('中華人民共和國移民管理局') //// cardFront.find('.number').text(hex2a(window.atob(szparam.CardInfo.No)))}else if (szparam.CardType == 89){// 切換背景圖片 83是臺灣cardFront.removeClass()cardBack.removeClass()cardFront.addClass('WGR-card')cardFront.addClass('card-new-foreigner-front')cardBack.addClass('WGR-card')cardBack.addClass('card-new-foreigner-back')strLog = '讀取 外國人永久居留身份證(新版) 成功\r\n';strLog += 'SN:' + szparam.CardInfo.SN + '\r\n';strLog += '中文名:' + hex2a(window.atob(szparam.CardInfo.Name)) + '\r\n';strLog += '英文名:' + hex2a(window.atob(szparam.CardInfo.EnName)) + '\r\n';strLog += '證件號碼:' + hex2a(window.atob(szparam.CardInfo.No)) + '\r\n';strLog += '性別:' + hex2a(window.atob(szparam.CardInfo.Sex)) + '\r\n';strLog += '出生日期:' + hex2a(window.atob(szparam.CardInfo.Birthday)) + '\r\n';strLog += '國籍:' + hex2a(window.atob(szparam.CardInfo.Country)) + '\r\n';strLog += '簽發機關:中華人民共和國移民管理局\r\n';strLog += '開始日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin)) + '\r\n';strLog += '結束日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)) + '\r\n\r\n';strLog += '通行證號碼:' + hex2a(window.atob(szparam.CardInfo.OtherNO)) + '\r\n';strLog += '簽發次數:' + hex2a(window.atob(szparam.CardInfo.SignNum)) + '\r\n';// processContent.text(strLog)let name = hex2a(window.atob(szparam.CardInfo.Name))let enName = hex2a(window.atob(szparam.CardInfo.EnName))// cardFront.find('.name').text(name)// cardFront.find('.enName').text(enName)// cardFront.find('.sex').text(hex2a(window.atob(szparam.CardInfo.Sex)) === '1'? '男': '女')const Birthday = hex2a(window.atob(szparam.CardInfo.Birthday))const birthArr = parseDateString(Birthday , ".", true).split(".")// cardFront.find('.year').text(birthArr.join('-')) //出生年月// cardFront.find('.month').text(hex2a(window.atob(szparam.CardInfo.Country)))//國籍const ValidityPeriodBegin = hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin))const ValidityPeriodEnd = hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)).trim()const expiryBegin = parseDateString(ValidityPeriodBegin, '.')const expiryEnd = ValidityPeriodEnd !== '長期' ? parseDateString(ValidityPeriodEnd, '.') : ValidityPeriodEnd// cardFront.find('.date').text(expiryBegin + '-' + expiryEnd)// cardFront.find('.number').text(hex2a(window.atob(szparam.CardInfo.No)))}else{// cardFront.removeClass()// cardBack.removeClass()//cardFront.addClass('ID-card')// cardFront.addClass('card-front')// cardBack.addClass('ID-card')// cardBack.addClass('card-back')strLog = '讀取 身份證 成功\r\n';strLog += 'SN:' + szparam.CardInfo.SN + '\r\n';strLog += '中文名:' + hex2a(window.atob(szparam.CardInfo.Name)) + '\r\n';strLog += '證件號碼:' + hex2a(window.atob(szparam.CardInfo.No)) + '\r\n';strLog += '性別:' + hex2a(window.atob(szparam.CardInfo.Sex)) + '\r\n';strLog += '出生日期:' + hex2a(window.atob(szparam.CardInfo.Birthday)) + '\r\n';strLog += '民族:' + hex2a(window.atob(szparam.CardInfo.Nation)) + '\r\n';strLog += '地址:' + hex2a(window.atob(szparam.CardInfo.Address)) + '\r\n';strLog += '簽發機關:' + hex2a(window.atob(szparam.CardInfo.SignedDepartment)) + '\r\n';strLog += '開始日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin)) + '\r\n';strLog += '結束日期:' + hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)) + '\r\n\r\n';strLog += '通行證號碼:' + hex2a(window.atob(szparam.CardInfo.OtherNO)) + '\r\n';strLog += '簽發次數:' + hex2a(window.atob(szparam.CardInfo.SignNum)) + '\r\n';// alert(strLog);// processContent.text(strLog)// 內容填充// cardFront.find('.name').text(hex2a(window.atob(szparam.CardInfo.Name)))// cardFront.find('.sex').text(hex2a(window.atob(szparam.CardInfo.Sex)))// cardFront.find('.nation').text(hex2a(window.atob(szparam.CardInfo.Nation)))const Birthday = hex2a(window.atob(szparam.CardInfo.Birthday))const birthArr = parseDateString(Birthday , ".", true).split(".")// cardFront.find('.year').text(birthArr[0])// cardFront.find('.month').text(birthArr[1])// cardFront.find('.date').text(birthArr[2])// cardFront.find('.address').text(hex2a(window.atob(szparam.CardInfo.Address)))// cardFront.find('.number').text(hex2a(window.atob(szparam.CardInfo.No)))// cardBack.find('.department').text(hex2a(window.atob(szparam.CardInfo.SignedDepartment)))const ValidityPeriodBegin = hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin))const ValidityPeriodEnd = hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)).trim()const expiryBegin = parseDateString(ValidityPeriodBegin, '.')const expiryEnd = ValidityPeriodEnd !== '長期' ? parseDateString(ValidityPeriodEnd, '.') : ValidityPeriodEnd// cardBack.find('.expiry').text( expiryBegin + '-' + expiryEnd)const 姓名 = hex2a(window.atob(szparam.CardInfo.Name));const 證件號 =hex2a(window.atob(szparam.CardInfo.No));var 性別 =hex2a(window.atob(szparam.CardInfo.Sex)) ;const 地址 = hex2a(window.atob(szparam.CardInfo.Address)); // alert(地址);if(性別 == 1){性別="男";}else{性別="女";}var 身份證信息={username:姓名,userid:證件號,usersex:性別,address:地址};未來之窗_人工智能_前端口_數據渲染到界面(身份證信息,"");}// SNContent.text(szparam.CardInfo.SN)// cardFront.find('.image').attr('src','data:image/jpg;base64,' + szparam.BmpInfo)// if (szparam.CardInfo.Name){// cardFront.find('.name').text(hex2a(window.atob(szparam.CardInfo.Name)))// }// if (szparam.CardInfo.Sex){// cardFront.find('.sex').text(hex2a(window.atob(szparam.CardInfo.Sex)))// }// if (szparam.CardInfo.Nation){// cardFront.find('.nation').text(hex2a(window.atob(szparam.CardInfo.Nation)))// }//// const Birthday = hex2a(window.atob(szparam.CardInfo.Birthday))// const birthArr = parseDateString(Birthday , ".", true).split(".")// cardFront.find('.year').text(birthArr[0])// cardFront.find('.month').text(birthArr[1])// cardFront.find('.date').text(birthArr[2])//// if (szparam.CardInfo.Address){// cardFront.find('.address').text(hex2a(window.atob(szparam.CardInfo.Address)))// }//// if (szparam.CardInfo.No){// cardFront.find('.number').text(hex2a(window.atob(szparam.CardInfo.No)))// }//// if (szparam.CardInfo.SignedDepartment){// cardBack.find('.department').text(hex2a(window.atob(szparam.CardInfo.SignedDepartment)))// }//// const ValidityPeriodBegin = hex2a(window.atob(szparam.CardInfo.ValidityPeriodBegin))// const ValidityPeriodEnd = hex2a(window.atob(szparam.CardInfo.ValidityPeriodEnd)).trim()// const expiryBegin = parseDateString(ValidityPeriodBegin, '.')// const expiryEnd = ValidityPeriodEnd !== '長期' ? parseDateString(ValidityPeriodEnd, '.') : ValidityPeriodEnd// cardBack.find('.expiry').text( expiryBegin + '-' + expiryEnd)}
相關函數
function hex2a(hex) {let str_list = ''for (let i = 0; i < hex.length && hex.substr(i, 2) !== '00'; i += 2) {const a = hex.charCodeAt(i)const b = hex.charCodeAt(i + 1)const c = b * 256 + astr_list += String.fromCharCode(c)}return str_list.toString()}function parseDateString(str, deco, zero) {let year = str.substr(0,4)let month = str.substr(4,2)let date = str.substr(6)if(zero) {month = month.substr(0,1) === "0" ? month.substr(1) : monthdate = date.substr(0,1) === "0" ? date.substr(1) : date}return `${year}${deco}${month}${deco}${date}`}
智能編程
智能編程能大幅提升編程效率,自動完成重復代碼編寫、精準提供代碼建議,還可借助數據分析優化代碼性能,并降低編程門檻,讓更多人參與開發,加速創新進程
阿雪技術觀
讓我們積極投身于技術共享的浪潮中,不僅僅是作為受益者,更要成為貢獻者。無論是分享自己的代碼、撰寫技術博客,還是參與開源項目的維護和改進,每一個小小的舉動都可能成為推動技術進步的巨大力量
Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progress.