+
liuyg
2021-11-22 14f21a19a240b672eb89e76c448b45f74610ef0f
+
1 files added
676 ■■■■■ changed files
src/views/securityGuard/sfzJS.js 676 ●●●●● patch | view | raw | blame | history
src/views/securityGuard/sfzJS.js
New file
@@ -0,0 +1,676 @@
var clearFormData = '';
var urls = '';
//创建读卡控件
var CertCtl = new IDCertCtl();
//身份证读卡控件创建
function IDCertCtl(clearForms) {
    clearFormData = clearForms;
    //创建用于与服务交换数据的对象
    this.xhr = createXmlHttp();
    this.type = "CertCtl";
    this.height = 0;
    this.width = 0;
    //连接
    this.connect = CertCtl_connect;
    //断开
    this.disconnect = CertCtl_disconnect;
    //获取状态
    this.getStatus = CertCtl_getStatus;
    //读卡
    this.readCert = CertCtl_readCert;
    //读IC卡序列号
    this.readICCardSN = CertCtl_readICCardSN;
    //读身份证物理卡号
    this.readIDCardSN = CertCtl_readIDCardSN;
    //读安全模块接口
    this.getSAMID = CertCtl_getSAMID;
    //读M1卡扇区内容
    this.readM1Card = CertCtl_readM1Card;
    //写M1卡扇区内容
    this.writeM1Card = CertCtl_writeM1Card;
    //处理CPU卡APDU指令
    this.handleAPDUCMD = CertCtl_handleAPDUCMD;
    //设置项目识别码
    //this.setProgramCode = CertCtl_setProgramCode;
    //核验项目识别码
    this.checkProgramCode = CertCtl_checkProgramCode;
    this.Routon_Mute = CertCtl_RoutonMute;
    this.clearForms = clearFormData;
}
//创建XMLHttpRequest 对象,用于在后台与服务器交换数据
function createXmlHttp() {
    var xmlHttp = null;
    //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式
    }
    else if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
    }
    xmlHttp.withCredentials = false;
    return xmlHttp;
}
//连接方法
function CertCtl_connect() {
    var result = "";
    var iParam1 = "1";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/connect", false);
    // CertCtl.xhr.open("POST", urls, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    //返回值readyState   0: 请求未初始化
    //                    1: 服务器连接已建立
    //                    2:请求已接收
    //                    3: 请求处理中
    //                    4: 请求已完成,且响应已就绪
    //返回值status      200: "OK"
    //                    404: 未找到页面
    //当返回值readyState为4且status为200时,为查询成功
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//断开方法
function CertCtl_disconnect() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/disconnect", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//获取状态方法
function CertCtl_getStatus() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/getStatus", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//执行读卡操作
function CertCtl_readCert() {
    var result = "";
    try {
        //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
        CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readCard", false); //readCard读卡,不生成正反面仿复印件
        //CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readCert", false);      //readCert读卡,生成正反面仿复印件
        //发送请求
        CertCtl.xhr.send();
        if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
            result = CertCtl.xhr.responseText;
            CertCtl.xhr.readyState = 1;
        }
    } catch (e) {
    }
    return result;
}
//获取IC卡序列号
function CertCtl_readICCardSN() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readICCardSN", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//获取身份证物理卡号
function CertCtl_readIDCardSN() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readIDCardSN", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//获取SAMID
function CertCtl_getSAMID() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    //getSAMID 获取的SAMID,格式为:05032013102800015247360103645891
    //getSAMIDStr 获取SAMID,格式为:05.03-20131028-0001524736-0103645891
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/getSAMIDStr", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//读M1卡扇区内容
function CertCtl_readM1Card() {
    var result = "";
    var sid = "1";
    var bid = "1";
    var keyType = "1";
    var key = "ffffffffffff";
    if (document.getElementById("input_sid").value != "") {
        sid = document.getElementById("input_sid").value;
    }
    if (document.getElementById("input_bid").value != "") {
        bid = document.getElementById("input_bid").value;
    }
    if (document.getElementById("input_keytype").value != "") {
        keyType = document.getElementById("input_keytype").value;
    }
    if (document.getElementById("input_key").value != "") {
        key = document.getElementById("input_key").value;
    }
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readM1Card?" + "SID=" + sid + "&BID=" + bid + "&KEYTYPE=" + keyType + "&KEY=" + key, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//写M1卡扇区内容
function CertCtl_writeM1Card() {
    var result = "";
    var sid = "1";
    var bid = "1";
    var keyType = "1";
    var key = "ffffffffffff";
    var data = "00000000000000000000000000000000";
    if (document.getElementById("input_sid").value != "") {
        sid = document.getElementById("input_sid").value;
    }
    if (document.getElementById("input_bid").value != "") {
        bid = document.getElementById("input_bid").value;
    }
    if (document.getElementById("input_keytype").value != "") {
        keyType = document.getElementById("input_keytype").value;
    }
    if (document.getElementById("input_key").value != "") {
        key = document.getElementById("input_key").value;
    }
    if (document.getElementById("cmd").value != "") {
        data = document.getElementById("cmd").value;
    }
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/writeM1Card?" + "SID=" + sid + "&BID=" + bid + "&KEYTYPE=" + keyType + "&KEY=" + key + "&DATA=" + data, false);
    //CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/writeM1Card?"+"SID="+sid+"&BID="+bid+"&KEYTYPE="+keyType+"&KEY="+key+"&DATA="+data, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//处理CPU卡APDU指令
function CertCtl_handleAPDUCMD() {
    //var cmd = "00A4000000"; //基本命令(测试用):选择MF下的根目录,返回值为:6F15840E315041592E5359532E4444463031A5038801019000
    var cmd = "";
    if (document.getElementById("cmd").value != "") {
        cmd = document.getElementById("cmd").value;
    }
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/handleAPDUCMD?" + "APDUCMD=" + cmd, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
/*
//设置项目识别码
function CertCtl_setProgramCode(){
    var programData = "";
    if(document.getElementById("programData").value != "")
    {
        programData = document.getElementById("programData").value;
    }
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/setProgramCode?"+"PROGRAMCODE="+programData, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
*/
//核验项目识别码
function CertCtl_checkProgramCode() {
    var programData = "";
    if (document.getElementById("programData").value != "") {
        programData = document.getElementById("programData").value;
    }
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/checkProgramCode?" + "PROGRAMCODE=" + programData, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//关闭声音
function CertCtl_RoutonMute() {
    var result = "";
    var IsMute = false; //false - 开声音(默认开), true - 关声音
    //创建请求 第一个参数是代表以post方式发送;第二个是请求端口和地址;第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/Routon_Mute?" + "ISMUTE=" + IsMute, false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {
    }
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//转为Json格式
function toJson(str) {
    //var obj = JSON.parse(str);
    //return obj;
    return eval('(' + str + ')');
}
//清空页面上显示的内容
function clearForm() {
    clearFormData();
    //对应控件的值全部清空
    // document.getElementById("timeElapsed").value = "";
    // document.getElementById("certType").value = "";
    // document.getElementById("timeElapsed").value = "";
    // document.getElementById("venderId").value = "";
    // document.getElementById("signature").value = "";
    // document.getElementById("partyName").value = "";
    // document.getElementById("gender").value = "";
    // document.getElementById("nation").value = "";
    // document.getElementById("bornDay").value = "";
    // document.getElementById("certAddress").value = "";
    // document.getElementById("certNumber").value = "";
    // document.getElementById("certOrg").value = "";
    // document.getElementById("effDate").value = "";
    // document.getElementById("expDate").value = "";
    // document.getElementById("result").value = "";
    // document.getElementById("HeadPic").src = "";
    // document.getElementById("PhotoDisplay").src = "";
    //document.getElementById("programData").value = "";
    //document.getElementById("input_sid").value = "";
    //document.getElementById("input_bid").value = "";
    //document.getElementById("input_keytype").value = "";
    //document.getElementById("input_key").value = "";
    //document.getElementById("data").value = "";
    //document.getElementById("ACardResult").value = "";
}
//连接方法
function connect() {
    //清空页面
    clearForm();
    try {
        //调用对应的连接方法,并赋值给result
        var result = CertCtl.connect();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
//断开连接方法
function disconnect() {
    //清空页面
    clearForm();
    try {
        //调用对应的断开连接方法,并赋值给result
        var result = CertCtl.disconnect();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
//获取状态方法
function getStatus() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.getStatus();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
//读卡方法
function readCert() {
    //清空页面
    clearForm();
    //开始时间
    var startDt = new Date();
    //调用对应的读卡方法
    var result = CertCtl.readCert();
    //如果result为空,代表读卡插件未启动
    if (result == "") {
        alert("未启动读卡插件!")
    } else {
        //结束时间
        var endDt = new Date();
        //读卡时间回显
        document.getElementById("timeElapsed").value = (endDt.getTime() - startDt.getTime()) + "毫秒";
        document.getElementById("result").value = result;
        //var resultObj = toJson(result);
        //result = result.replace("\"resultFlag\":","\"resultFlag\":\"true\"");
        //格式化result
        //var resultObj = $.parseJSON(result);//windows10上面无法解析
        var resultObj = eval('(' + result + ')');
        //resultFlag为0代表读卡成功
        if (resultObj.resultFlag == "0") {
            //回显相关数据
            document.getElementById("signature").value = resultObj.signature;
            document.getElementById("venderId").value = resultObj.venderId;
            document.getElementById("certType").value = resultObj.resultContent.certType;
            document.getElementById("partyName").value = resultObj.resultContent.partyName;
            document.getElementById("gender").value = resultObj.resultContent.gender;
            document.getElementById("nation").value = resultObj.resultContent.nation;
            document.getElementById("bornDay").value = resultObj.resultContent.bornDay;
            document.getElementById("certAddress").value = resultObj.resultContent.certAddress;
            document.getElementById("certNumber").value = resultObj.resultContent.certNumber;
            document.getElementById("certOrg").value = resultObj.resultContent.certOrg;
            document.getElementById("effDate").value = resultObj.resultContent.effDate;
            document.getElementById("expDate").value = resultObj.resultContent.expDate;
            document.getElementById("HeadPic").src = "data:image/jpeg;base64," + resultObj.resultContent.identityPic;
            document.getElementById("PhotoDisplay").src = "data:image/jpeg;base64," + resultObj.resultContent.identityPrintPic;
        } else if (resultObj.resultFlag == "-1") {
            if (resultObj.errorMsg == "端口打开失败") {
                alert("读卡器未连接");
            } else {
                alert(resultObj.errorMsg);
            }
        } else if (resultObj.resultFlag == "-2") {
            alert(resultObj.errorMsg);
        }
    }
}
function readICCardSN() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        //CertCtl.Routon_Mute();
        var result = CertCtl.readICCardSN();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
function readIDCardSN() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.readIDCardSN();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
function getSAMID() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.getSAMID();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {
    }
}
function readM1Card() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.readM1Card();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("ACardResult").value = result;
        }
    } catch (e) {
    }
}
function writeM1Card() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.writeM1Card();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("ACardResult").value = result;
        }
    } catch (e) {
    }
}
function handleAPDUCMD() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.handleAPDUCMD();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("ACardResult").value = result;
        }
    } catch (e) {
    }
}
/*
function setProgramCode() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.setProgramCode();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("ACardResult").value = result;
        }
    } catch (e) {
    }
}
*/
/* 检测输入内容
function check()
{
    var programCode = document.getElementById("programData").value;
    if(programCode == "")
    {
        alert("项目码不能为空");
        return false;
    }
    else if(programCode.length != 8)
    {
        alert("项目码为8个字符");
        return false;
    }
    else
    {
        for(var i=0; i<programCode.length; i++)
        {
            if(!(programCode.charCodeAt(i)>='0'.charCodeAt() && programCode.charCodeAt(i)<='9'.charCodeAt())
            && !(programCode.charCodeAt(i)>='a'.charCodeAt() && programCode.charCodeAt(i)<='z'.charCodeAt())
            && !(programCode.charCodeAt(i)>='A'.charCodeAt() && programCode.charCodeAt(i)<='Z'.charCodeAt())
            )
            {
                alert("项目码只能包含英文字母和数字");
                return false;
            }
        }
    }
    return true;
}
*/
function checkProgramCode() {
    //清空页面
    clearForm();
    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.checkProgramCode();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("ACardResult").value = result;
        }
    } catch (e) {
    }
}
export default CertCtl;