JS SDK集成开发文档
<h1>导入js sdk依赖</h1>
<pre><code class="language-javaScript">&lt;!-- 引用本地的 JS 文件 --&gt;
&lt;!-- &lt;script type=&quot;text/javascript&quot; src=&quot;../dist/CSHTReadCard.js&quot;&gt;&lt;/script&gt; --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://gitee.com/cshtzrgk/read-card-sdk/raw/master/static/CSHTReadCard.js&quot;&gt;&lt;/script&gt;</code></pre>
<h1>USB读卡示例</h1>
<ul>
<li>使用 Web USB,安全上下文:此功能仅在所有支持浏览器中的安全上下文(HTTPS)中可用。</li>
</ul>
<pre><code class="language-javaScript">&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;title&gt;HtmlUSB读卡测试&lt;/title&gt;
&lt;style&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;button onclick=&quot;initRead()&quot;&gt;初始化读卡&lt;/button&gt;
&lt;button onclick=&quot;stopRead()&quot;&gt;停止读卡&lt;/button&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div id=&quot;showInfo&quot;&gt;&lt;/div&gt;
&lt;!-- 引用 读卡 JS 文件 --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://gitee.com/cshtzrgk/read-card-sdk/raw/master/static/CSHTReadCard.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
var initSuccess = false;
var lastStatusCode = -100;
var StatusCode = StatusCodeEnum();
console.log(&quot;StatusCode: &quot;, StatusCode);
var divShow = document.getElementById(&quot;showInfo&quot;);
function stopRead() {
lastStatusCode = -100;
initSuccess = false;
stopReadCard();
}
function initRead() {
if (lastStatusCode == StatusCode.ININ_ING.code) {
console.log(&quot;---初始化中---&quot;);
return;
}
if (initSuccess) {
alert(&quot;已经初始化过了&quot;);
return;
}
// 设置APPID APPID联系我司商务获取
setAppId(&quot;&quot;);
// 设置参数
readSetting({
decodeImageType: &quot;dn1&quot;, // dn0: 无照片 dn1: 平台解码照片
readCardType: 1, // 1:USB
openLocalCache: true, // 是否开启本地缓存
ipPortArray: [{
address: &#039;wss://epassport.sfzydq.com&#039;,
port: 443,
canUse: true
}]
});
// 连接蓝牙并开始读卡
startReadCard(function (code, msg, value, cardType) {
let code_msg = &quot;code:&quot; + code + &quot;\n&quot; + &quot;msg:&quot; + msg;
console.log(code_msg);
divShow.textContent = code_msg;
lastStatusCode = code;
switch (code) {
case StatusCode.ININ_ING.code: // 初始化中
console.log(&quot;初始化中&quot;);
break;
case StatusCode.ININ_OK.code: // 初始化成功
initSuccess = true;
console.log(&quot;初始化成功&quot;);
break;
case StatusCode.ININ_FAILE.code: // 初始化失败
initSuccess = false;
console.log(&quot;初始化失败&quot;, msg);
break;
case StatusCode.FIND_CARD_START.code: // 开始寻卡
console.log(&quot;开始寻卡&quot;);
break;
case StatusCode.FIND_CARD_SUCCESS.code: // 寻卡成功
console.log(&quot;寻卡成功&quot;);
break;
case StatusCode.READCARD_START.code: // 解码中
console.log(&quot;解码中,请勿移动卡片&quot;);
break;
case StatusCode.READCARD_SUCCESS.code: // 解码成功
console.log(&quot;解码成功&quot;);
try {
switch (cardType) {
case StatusCode.CARD_IC.code: // IC卡
console.log(&quot;IC卡:&quot;, value);
divShow.textContent = &quot;IC卡:&quot; + value;
break;
case StatusCode.CARD_IDCARD.code: // 身份证
var idCardInfo = JSON.parse(value);
var str = &quot;身份信息:&lt;br/&gt;&quot;;
if (idCardInfo.image != null &amp;&amp; idCardInfo.image != &quot;&quot;) {
str += &quot;&lt;img src=\&quot; &quot; + idCardInfo.image + &quot;\&quot;&gt;&lt;/img&gt;&lt;br/&gt;&quot;
}
switch (idCardInfo.type) {
case 1080:
str += &quot;中国居民身份证&lt;br/&gt;&quot;;
str += &quot;姓名:&quot; + idCardInfo.name + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;民族:&quot; + idCardInfo.nation + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;住址:&quot; + idCardInfo.address + &quot;&lt;br/&gt;&quot;;
str += &quot;身份证号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
break;
case 1081:
str += &quot;新版外国永久居住证&lt;br/&gt;&quot;;
str += &quot;中文姓名:&quot; + idCardInfo.nameChinese + &quot;&lt;br/&gt;&quot;;
str += &quot;英文姓名:&quot; + idCardInfo.nameEnglish + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;国籍:&quot; + idCardInfo.nationlity + &quot;&lt;br/&gt;&quot;;
str += &quot;证件号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;换证次数:&quot; + idCardInfo.renewalNumber + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;卡类型:&quot; + idCardInfo.cardType + &quot;&lt;br/&gt;&quot;;
str += &quot;卡版本号:&quot; + idCardInfo.cardVersion + &quot;&lt;br/&gt;&quot;;
str += &quot;既往版本证件号码关联项:&quot; + idCardInfo.historicalNumber + &quot;&lt;br/&gt;&quot;;
break;
case 1082:
str += &quot;港澳台居住证&lt;br/&gt;&quot;;
str += &quot;姓名:&quot; + idCardInfo.name + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;民族:&quot; + idCardInfo.nation + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;住址:&quot; + idCardInfo.address + &quot;&lt;br/&gt;&quot;;
str += &quot;身份证号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;通行证号码:&quot; + idCardInfo.passCheckId + &quot;&lt;br/&gt;&quot;;
str += &quot;签发次数:&quot; + idCardInfo.issuesNumber + &quot;&lt;br/&gt;&quot;;
break;
case 1083:
str += &quot;旧版外国永久居住证&lt;br/&gt;&quot;;
str += &quot;中文姓名:&quot; + idCardInfo.nameChinese + &quot;&lt;br/&gt;&quot;;
str += &quot;英文姓名:&quot; + idCardInfo.nameEnglish + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;国籍:&quot; + idCardInfo.nationlity + &quot;&lt;br/&gt;&quot;;
str += &quot;证件号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;换证次数:&quot; + idCardInfo.renewalNumber + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;卡类型:&quot; + idCardInfo.cardType + &quot;&lt;br/&gt;&quot;;
str += &quot;卡版本号:&quot; + idCardInfo.cardVersion + &quot;&lt;br/&gt;&quot;;
str += &quot;既往版本证件号码关联项:&quot; + idCardInfo.historicalNumber + &quot;&lt;br/&gt;&quot;;
break;
default:
break;
}
str += &quot;读卡耗时:&quot; + idCardInfo.distime + &quot;ms&lt;br/&gt;&quot;;
divShow.innerHTML = str;
break;
}
} catch (error) {
console.log(&quot;异常&quot;, error);
}
break;
case StatusCode.READCARD_FAILE.code: // 解码失败
console.log(&quot;解码失败,请重新放卡&quot;, msg);
break;
}
});
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h1>USB离线读卡器示例</h1>
<p>除驱动安装、参数设置外,其余同以上 USB示例一致。</p>
<h2>驱动安装</h2>
<p>先安装 SAM SDT驱动(<a href="https://gitee.com/cshtzrgk/read-card-sdk/raw/master/static/sam-win-driver.zip">下载win驱动</a>),插入读卡器,识别到 SDT USB设备。</p>
<p>1、打开 Zadig 软件(<a href="https://gitee.com/cshtzrgk/read-card-sdk/raw/master/static/zadigV24721.exe">下载zadig</a>),选择 “Options” --> 勾选“List All Devices”
2、下拉选择“SDT USB设备”
3、点击“Replace Driver” 替换驱动
<img src="https://epassport.sfzydq.com/resources/images/zadig/WINUSB_DRIVER01.png" alt="driver01" />
4、安装成功
<img src="https://epassport.sfzydq.com/resources/images/zadig/WINUSB_DRIVER02.png" alt="driver02" /></p>
<pre><code class="language-javaScript"> // 设置参数
readSetting({
decodeImageType: &quot;dn1&quot;, // dn0: 无照片 dn1: 平台解码照片
readCardType: 5, // 5:SAM USB
openLocalCache: true, // 是否开启本地缓存
ipPortArray: [
{
address: &#039;wss://epassport.sfzydq.com&#039;, // 生产地址
port: 443,
url: &#039;/iden&#039;,
canUse: true
}
]
});</code></pre>
<h1>蓝牙读卡示例</h1>
<pre><code class="language-javaScript">&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;title&gt;HtmlBLE读卡测试&lt;/title&gt;
&lt;style&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;button onclick=&quot;initRead()&quot;&gt;初始化读卡&lt;/button&gt;
&lt;button onclick=&quot;stopRead()&quot;&gt;停止读卡&lt;/button&gt;&lt;br /&gt;&lt;br /&gt;
&lt;button onclick=&quot;setName()&quot;&gt;修改蓝牙名称&lt;/button&gt; &lt;br /&gt;&lt;br /&gt;
&lt;input id=&quot;inputName&quot; value=&quot;&quot; placeholder=&quot;请输入蓝牙名称&quot; maxlength=&quot;5&quot; style=&quot;width: 400px;height: 30px;line-height: 30px;&quot;&gt;&lt;/input&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div id=&quot;showInfo&quot;&gt;&lt;/div&gt;
&lt;!-- 引用本地的 读卡 JS 文件 --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;../dist/CSHTReadCard.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
var initSuccess = false;
var lastStatusCode = -100;
var StatusCode = StatusCodeEnum();
console.log(&quot;StatusCode: &quot;, StatusCode);
var divShow = document.getElementById(&quot;showInfo&quot;);
function stopRead() {
lastStatusCode = -100;
initSuccess = false;
stopReadCard();
}
/**
* 修改蓝牙名称(最多5个字)
*/
function setName() {
if (!initSuccess) {
alert(&quot;请先初始化&quot;);
return;
}
var inputName = document.getElementById(&quot;inputName&quot;);
var name = inputName.value;
if (name == null || name.length == 0) {
alert(&quot;请输入名称&quot;);
return;
}
changeBleName(name).then((data) =&gt; {
divShow.textContent = &quot;修改名称:&quot; + data;
}).catch((error) =&gt; {
divShow.textContent = error;
});
}
function initRead() {
if (lastStatusCode == StatusCode.ININ_ING.code) {
console.log(&quot;---初始化中---&quot;);
return;
}
if (initSuccess) {
alert(&quot;已经初始化过了&quot;);
return;
}
// 设置APPID,APPID联系我司商务获取
setAppId(&quot;&quot;);
// 设置参数
readSetting({
decodeImageType: &quot;dn1&quot;, // dn0: 无照片 dn1: 平台解码照片
readCardType: 7, // 7:蓝牙
openLocalCache: true, // 是否开启本地缓存
ipPortArray: [{
address: &#039;wss://epassport.sfzydq.com&#039;,
port: 443,
canUse: true
}]
});
// 连接蓝牙并开始读卡
startReadCard(function (code, msg, value, cardType) {
let code_msg = &quot;code:&quot; + code + &quot;\n&quot; + &quot;msg:&quot; + msg;
console.log(code_msg);
divShow.textContent = code_msg;
lastStatusCode = code;
switch (code) {
case StatusCode.ININ_ING.code: // 初始化中
console.log(&quot;初始化中&quot;);
break;
case StatusCode.ININ_OK.code: // 初始化成功
initSuccess = true;
console.log(&quot;初始化成功&quot;);
break;
case StatusCode.ININ_FAILE.code: // 初始化失败
initSuccess = false;
console.log(&quot;初始化失败&quot;, msg);
break;
case StatusCode.FIND_CARD_START.code: // 开始寻卡
console.log(&quot;开始寻卡&quot;);
break;
case StatusCode.FIND_CARD_SUCCESS.code: // 寻卡成功
console.log(&quot;寻卡成功&quot;);
break;
case StatusCode.READCARD_START.code: // 解码中
console.log(&quot;解码中,请勿移动卡片&quot;);
break;
case StatusCode.READCARD_SUCCESS.code: // 解码成功
console.log(&quot;解码成功&quot;);
switch (cardType) {
case StatusCode.CARD_IC.code: // IC卡
console.log(&quot;IC卡:&quot;, value);
divShow.textContent = &quot;IC卡:&quot; + value;
break;
case StatusCode.CARD_IDCARD.code: // 身份证
var idCardInfo = JSON.parse(value);
var str = &quot;身份信息:&lt;br/&gt;&quot;;
if (idCardInfo.image != null &amp;&amp; idCardInfo.image != &quot;&quot;) {
str += &quot;&lt;img src=\&quot; &quot; + idCardInfo.image + &quot;\&quot;&gt;&lt;/img&gt;&lt;br/&gt;&quot;
}
switch (idCardInfo.type) {
case 1080:
str += &quot;中国居民身份证&lt;br/&gt;&quot;;
str += &quot;姓名:&quot; + idCardInfo.name + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;民族:&quot; + idCardInfo.nation + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;住址:&quot; + idCardInfo.address + &quot;&lt;br/&gt;&quot;;
str += &quot;身份证号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
break;
case 1081:
str += &quot;新版外国永久居住证&lt;br/&gt;&quot;;
str += &quot;中文姓名:&quot; + idCardInfo.nameChinese + &quot;&lt;br/&gt;&quot;;
str += &quot;英文姓名:&quot; + idCardInfo.nameEnglish + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;国籍:&quot; + idCardInfo.nationlity + &quot;&lt;br/&gt;&quot;;
str += &quot;证件号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;换证次数:&quot; + idCardInfo.renewalNumber + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;卡类型:&quot; + idCardInfo.cardType + &quot;&lt;br/&gt;&quot;;
str += &quot;卡版本号:&quot; + idCardInfo.cardVersion + &quot;&lt;br/&gt;&quot;;
str += &quot;既往版本证件号码关联项:&quot; + idCardInfo.historicalNumber + &quot;&lt;br/&gt;&quot;;
break;
case 1082:
str += &quot;港澳台居住证&lt;br/&gt;&quot;;
str += &quot;姓名:&quot; + idCardInfo.name + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;民族:&quot; + idCardInfo.nation + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;住址:&quot; + idCardInfo.address + &quot;&lt;br/&gt;&quot;;
str += &quot;身份证号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;通行证号码:&quot; + idCardInfo.passCheckId + &quot;&lt;br/&gt;&quot;;
str += &quot;签发次数:&quot; + idCardInfo.issuesNumber + &quot;&lt;br/&gt;&quot;;
break;
case 1083:
str += &quot;旧版外国永久居住证&lt;br/&gt;&quot;;
str += &quot;中文姓名:&quot; + idCardInfo.nameChinese + &quot;&lt;br/&gt;&quot;;
str += &quot;英文姓名:&quot; + idCardInfo.nameEnglish + &quot;&lt;br/&gt;&quot;;
str += &quot;性别:&quot; + idCardInfo.sex + &quot;&lt;br/&gt;&quot;;
str += &quot;出生日期:&quot; + idCardInfo.birthday + &quot;&lt;br/&gt;&quot;;
str += &quot;国籍:&quot; + idCardInfo.nationlity + &quot;&lt;br/&gt;&quot;;
str += &quot;证件号码:&quot; + idCardInfo.id + &quot;&lt;br/&gt;&quot;;
str += &quot;有效期限:&quot; + idCardInfo.startDate + &quot;-&quot; + idCardInfo.endDate + &quot;&lt;br/&gt;&quot;;
str += &quot;换证次数:&quot; + idCardInfo.renewalNumber + &quot;&lt;br/&gt;&quot;;
str += &quot;签发机关:&quot; + idCardInfo.issue + &quot;&lt;br/&gt;&quot;;
str += &quot;卡类型:&quot; + idCardInfo.cardType + &quot;&lt;br/&gt;&quot;;
str += &quot;卡版本号:&quot; + idCardInfo.cardVersion + &quot;&lt;br/&gt;&quot;;
str += &quot;既往版本证件号码关联项:&quot; + idCardInfo.historicalNumber + &quot;&lt;br/&gt;&quot;;
break;
default:
break;
}
str += &quot;读卡耗时:&quot; + idCardInfo.distime + &quot;ms&lt;br/&gt;&quot;;
divShow.innerHTML = str;
break;
}
break;
case StatusCode.READCARD_FAILE.code: // 解码失败
console.log(&quot;解码失败&quot;, msg);
break;
}
});
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>