JavaScript解析學習

用js模擬證書籤名和驗簽過程

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>證書數據格式Demo</title>
<script type="text/javascript">         
	var PkiCom;
	/**對象初始化**/
	window.onload = function init() {
		try {
			PkiCom = new ActiveXObject('PSIAtv.PSIAPP');//自解:生成一個相關的Active對象
		} catch (e) {
			alert('未檢測到本機上的數字證書客戶端,請確保數字證書客戶端正常運行。');
			if (confirm('您電腦上未安裝數字證書客戶端?\n是否下載並安裝數字證書客戶端?')) {
				//document.getElementById('seal_submit_btn').disabled = "true";
				btn_Controlle(0);	/*! 禁用submit控件 */
				alert('開始下載數字證書客戶端中......');
				return false;
			}
		}
	}

	function btn_Controlle(NO_OFF) {//★爲0是禁用控件、爲1是開啓控件
		var btn_array = document.getElementsByName("seal_submit_btn");//得到頁面的三個提交按鈕 
		switch(NO_OFF){
			case 0:
				for (var int = 0; int < btn_array.length; int++) {
					var btn = btn_array[int];
					btn.disabled = "true"; //三個提交按鈕都關閉
				}
				break;
			case 1:
				for (var int = 0; int < btn_array.length; int++) {
					var btn = btn_array[int];
					btn.disabled = "";	//三個提交按鈕都開啓
				}
				break;
		}
	}

	function PKIServer(obj) {
		if (typeof (PkiCom) != "undefined") {
			btn_Controlle(0); /*! 禁用submit控件 */
			PkiCom.AtvInit(); //hw:初始化
			/*! 證書實體 */
			var CertEntity = PkiCom.GetCert(2);//hw:得到證書
			if (CertEntity == '') {
				alert('請插入數字證書。');
				btn_Controlle(1); /*! 開啓submit控件 */
				return false;	//阻止表單提交
			}
			/*! 簽名原文  */
			var StrServerRan = 'SH="1";SN="您正在進行";IN="0";SI="經辦人註冊";|SH="0";SN="RandomNum";'
				+'IN="0";SI="q6Y7h7ABghQktoVkQ21t+UEIrDqGB4yG";|';
			/*! 簽名結果  */
			var StrClientSignedData = PkiCom.SignData(StrServerRan, 32772, 0);
			document.getElementById(obj+'CertEntity').value = CertEntity;
			document.getElementById(obj+'StrServerRan').value = StrServerRan;
			document.getElementById(obj+'StrClientSignedData').value = StrClientSignedData;
			return true;	//允許表單提交
		}
	}
</script>
</head>
<body>
	<div>
		<strong>身份認證交易 - 補充身份信息</strong>
		<form action="./seal" method="post" οnsubmit="return PKIServer('00001');">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易請求類型 --> 
						<input type="hidden" name="busitype" value="00001" />
						<!-- 證書實體 --> 
						<input type="hidden" id="00001CertEntity" name="certentity" /> 
						<!-- 簽名原文 --> 
						<input type="hidden" id="00001StrServerRan" name="strserverran" />
						<!-- 簽名結果 -->
						<input type="hidden" id="00001StrClientSignedData" name="strcilentsigneddata" />
					</td>
				</tr>
				<tr>
					<td>客戶姓名:</td>
					<td><input type="text" name="username" value="張三" /></td>
				</tr>
				<tr>
					<td>證件類型:</td>
					<td><select name="idtype">
							<option value="A">身份證</option>
							<option value="B">軍官證</option>
							<option value="C">解放軍文職幹部證</option>
							<option value="D">警官證</option>
							<option value="E">解放軍士兵證</option>
							<option value="F">戶口簿</option>
							<option value="G">(港澳)回鄉證-通行證</option>
							<option value="H">臺通行證-其他有效旅行證</option>
							<option value="I">(外國)護照</option>
							<option value="J">(中國)護照</option>
							<option value="K">武警文職幹部證</option>
							<option value="L">武警士兵證</option>
							<option value="P">全國組織機構代碼</option>
							<option value="Q">海外客戶編號</option>
							<option value="R">營業執照號碼</option>
							<option value="r">對公營業執照號碼</option>
							<option value="Z">其他</option>
					</select></td>
				</tr>
				<tr>
					<td>證件號碼:</td>
					<td><input type="text" name="idnumber" value="440306201306289999" /></td>
				</tr>
				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>

	<div>
		<strong>簽名認證交易 - 補充身份信息</strong>
		<!-- ★★★onsubmit屬性值:規定該事件發生時執行的 JavaScript 
			 return PKIServer('00002'); 利用到了它的返回值,達到了預期效果
			  作用:當PKIServer函數return false的時候,此表單是不會提交請求的,爲true的時候纔會跳轉頁面
			  -->
		<form action="./seal" method="post" οnsubmit="return PKIServer('00002');">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易請求類型 --> 
						<input type="hidden" name="busitype" value="00002" />
						<!-- 證書實體 --> 
						<input type="hidden" id="00002CertEntity" name="certentity" /> 
						<!-- 簽名原文 --> <input type="hidden" id="00002StrClientSignedData" name="StrClientSignedData" />
					</td>
				</tr>
				<tr>
					<td>客戶姓名:</td>
					<td><input type="text" name="username" value="張三" /></td>
				</tr>
				<tr>
					<td>證件號碼:</td>
					<td><input type="text" name="idnumber"
						value="440306201306289999" /></td>
				</tr>
				<tr>
					<td>文檔編號:</td>
					<td><input type="number" name="docsn" value="1234567890123456" /></td>
				</tr>
				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>
	
	<div>
		<strong>簽名認證交易 - 文檔驗籤</strong>
		<form action="./seal" method="post">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易請求類型 --> <input type="hidden" name="busitype" value="00003" />
					</td>
				</tr>
				<tr>
					<td>文檔編號:</td>
					<td><input type="number" name="docsn" value="1234567890123456" /></td>
				</tr>
				<tr>
					<td>簽名域數量:</td>
					<td><input type="number" name="signnum" value="4" /></td>
				</tr>
				<tr>
					<td>文檔驗證結果:</td>
					<td>成功<input type="radio" name="docsignresult"
						value="0" checked="checked" />
						失敗<input type="radio" name="docsignresult"
						value="1" /></td>
				</tr>

				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

知識點總結落實:

發佈了56 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章