ThCardReader是一个读卡服务程序,提供HTTP接口用于读取各种证件信息。本版本支持:
http://localhost:8321
通过华视电子身份证读卡器读取二代身份证信息,包括基本信息和照片数据。
GET /readcard/entry?param=huashi_init_1001
参数说明:
1001
:USB端口号(1001-1016)返回示例:
{
"code": 200,
"message": "华视读卡器初始化成功",
"device": "华视电子身份证读卡器",
"port": 1001
}
GET /readcard/entry?param=huashi_readcard
返回示例:
{
"code": 200,
"type": "idcard",
"data": "张三^男^汉^19900101^北京市朝阳区某某街道^公安部门^20200101-20300101^",
"message": "读取身份证成功。"
}
数据格式说明:
data字段用"^"分隔,包含以下信息:
[0] 姓名
[1] 性别
[2] 民族
[3] 出生日期
[4] 地址
[5] 签发机关
[6] 有效期(开始日期-结束日期)
[7] 照片Base64数据(可选)
GET /readcard/entry?param=huashi_continuous
GET /readcard/entry?param=huashi_status
GET /readcard/entry?param=huashi_close
GET /readcard/huashi/simple?action=readcard&port=1001
POST /readcard/huashi/readcard
Content-Type: application/json
{
"savePath": "",
"autoClose": true
}
通过江苏医保接口读取社保卡基本信息,支持自动初始化和PIN码验证。
GET /readcard/jiangsu/readcard_auto
特点:
返回示例:
{
"success": true,
"code": 200,
"message": "社保卡读取成功",
"device": "江苏医保社保卡读卡器",
"interface": "江苏医保接口 v0.9.9.15",
"interfaceType": "medical",
"initMode": "auto",
"autoInitSuccess": true,
"data": {
"cardInfo": "639900|111111198101011110|X00000019|...",
"busiInfo": "业务信息数据",
"name": "张三",
"idCard": "111111198101011110",
"cardNumber": "X00000019"
},
"timestamp": "2024-01-01 10:00:00"
}
GET /readcard/jiangsu/readcard_auto_pin
GET /readcard/jiangsu/init
GET /readcard/jiangsu/readcard
GET /readcard/jiangsu/status
GET /readcard/jiangsu/verifypin
GET /readcard/jiangsu/changepin
POST /readcard/jiangsu
Content-Type: application/json
{
"action": "readcard",
"autoVerifyPIN": false,
"autoInit": true
}
POST /readcard/jiangsu
Content-Type: application/json
{
"action": "init",
"config": {
"IP": "10.61.165.3",
"PORT": 8086,
"TIMEOUT": 30,
"ACCESS_KEY": "your_access_key",
"SECRETKEY": "your_secret_key",
"ORG_ID": "H32132200561",
"AREA_CODE": "321322"
}
}
639900|111111198101011110|X00000019|639900D15600000500BF7C7A48FB4966|张三|00814E43238697159900BF7C7A|1.00|20101001|20201001|410100813475|终端设备号|
字段说明:
[0] 发卡地区行政区划代码
[1] 社会保障号码(身份证号)
[2] 卡号
[3] 卡识别码
[4] 姓名
[5] 卡复位信息
[6] 规范版本
[7] 发卡日期
[8] 卡有效期
[9] 终端机编号
[10] 终端设备号
// 读取身份证
async function readIdCard() {
try {
const response = await fetch('http://localhost:8321/readcard/entry?param=huashi_readcard');
const data = await response.json();
if (data.code === 200) {
// 解析身份证数据
const idInfo = data.data.split('^');
console.log('姓名:', idInfo[0]);
console.log('性别:', idInfo[1]);
console.log('民族:', idInfo[2]);
console.log('出生日期:', idInfo[3]);
console.log('地址:', idInfo[4]);
} else {
console.error('读卡失败:', data.message);
}
} catch (error) {
console.error('请求异常:', error);
}
}
// 自动初始化读社保卡
async function readSocialCard() {
try {
const response = await fetch('http://localhost:8321/readcard/jiangsu/readcard_auto');
const data = await response.json();
if (data.success) {
console.log('读卡成功:', data.data);
if (data.autoInitSuccess) {
console.log('已自动完成初始化');
}
} else {
console.error('读卡失败:', data.message);
}
} catch (error) {
console.error('请求异常:', error);
}
}
// POST方式调用
async function readSocialCardWithPost() {
try {
const response = await fetch('http://localhost:8321/readcard/jiangsu', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
action: 'readcard',
autoVerifyPIN: false,
autoInit: true
})
});
const data = await response.json();
console.log('读卡结果:', data);
} catch (error) {
console.error('请求异常:', error);
}
}
using System.Net.Http;
using Newtonsoft.Json.Linq;
// 读取身份证
private async Task<JObject> ReadIdCardAsync()
{
using (var client = new HttpClient())
{
string url = "http://localhost:8321/readcard/entry?param=huashi_readcard";
string response = await client.GetStringAsync(url);
return JObject.Parse(response);
}
}
// 解析身份证数据
private void ParseIdCardData(JObject result)
{
if ((int)result["code"] == 200)
{
string[] idInfo = result["data"].ToString().Split('^');
string name = idInfo[0]; // 姓名
string gender = idInfo[1]; // 性别
string nation = idInfo[2]; // 民族
string birthday = idInfo[3]; // 出生日期
string address = idInfo[4]; // 地址
}
}
// 自动初始化读社保卡
private async Task<JObject> ReadSocialCardAsync()
{
using (var client = new HttpClient())
{
string url = "http://localhost:8321/readcard/jiangsu/readcard_auto";
string response = await client.GetStringAsync(url);
return JObject.Parse(response);
}
}
// POST方式调用
private async Task<JObject> ReadSocialCardWithPostAsync()
{
using (var client = new HttpClient())
{
var requestData = new
{
action = "readcard",
autoVerifyPIN = false,
autoInit = true
};
var json = JsonConvert.SerializeObject(requestData);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://localhost:8321/readcard/jiangsu", content);
var responseContent = await response.Content.ReadAsStringAsync();
return JObject.Parse(responseContent);
}
}
// 使用 OkHttp 库
import okhttp3.*;
import com.google.gson.Gson;
public class CardReader {
private static final String BASE_URL = "http://localhost:8321";
private OkHttpClient client = new OkHttpClient();
private Gson gson = new Gson();
// 华视读身份证
public void readIdCard() throws IOException {
Request request = new Request.Builder()
.url(BASE_URL + "/readcard/entry?param=huashi_readcard")
.build();
try (Response response = client.newCall(request).execute()) {
String responseBody = response.body().string();
// 处理返回数据
System.out.println(responseBody);
}
}
// 江苏医保读社保卡
public void readSocialCard() throws IOException {
Request request = new Request.Builder()
.url(BASE_URL + "/readcard/jiangsu/readcard_auto")
.build();
try (Response response = client.newCall(request).execute()) {
String responseBody = response.body().string();
// 处理返回数据
System.out.println(responseBody);
}
}
}
错误码 | 说明 | 解决方案 |
---|---|---|
200 | 成功 | 正常状态 |
1001 | 参数错误或设备未连接 | 检查参数和设备连接 |
1002 | 系统未初始化 | 调用初始化接口或使用auto接口 |
9001 | 系统异常 | 检查日志,重启服务 |
3000+ | 江苏医保DLL错误 | 检查DLL文件和网络连接 |
function handleError(result) {
switch(result.code) {
case 200:
console.log('操作成功');
break;
case 1001:
console.error('设备错误,请检查读卡器连接');
break;
case 1002:
console.error('系统未初始化,请先初始化');
break;
default:
console.error('未知错误:', result.message);
}
}
Q: 读卡器无法识别身份证?
A: 检查以下几点:
- USB连接是否正常
- 驱动是否正确安装
- 身份证是否正确放置
- 尝试重新初始化:/readcard/entry?param=huashi_init_1001
Q: 返回错误码1001?
A: 通常是硬件问题:
- 检查读卡器USB连接
- 确认身份证放置正确
- 重启读卡器驱动
Q: 自动初始化失败?
A: 检查以下配置:
- 网络连接是否正常
- 配置参数是否正确
- DLL文件是否完整
- 尝试手动初始化
Q: 社保卡读取失败?
A: 可能的原因:
- 社保卡未正确插入
- 网络连接问题
- 配置参数错误
- 建议使用 /readcard/jiangsu/diagnose 诊断
Q: 无法访问HTTP接口?
A: 检查以下设置:
- 程序是否以管理员权限运行
- 防火墙是否允许8321端口
- 端口是否被其他程序占用
Q: 服务启动失败?
A: 可能的解决方案:
- 以管理员身份运行
- 检查.NET Framework版本
- 确保端口8321未被占用
# 健康检查
GET /readcard/huashi/health
# 华视设备状态
GET /readcard/huashi/status
# 江苏医保状态
GET /readcard/jiangsu/status
# 江苏医保诊断
GET /readcard/jiangsu/diagnose
程序目录/NEULOGS/ # 东软日志
程序目录/TSLOG/ # 终端日志
程序目录/logs/ # 江苏医保日志
重要提醒: