华视身份证阅读器100UC HTTP模式二次开发
生活随笔
收集整理的這篇文章主要介紹了
华视身份证阅读器100UC HTTP模式二次开发
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一:前言
設(shè)備已經(jīng)安裝好100UC的USB驅(qū)動(dòng),設(shè)備能正常工作
二:獲取數(shù)據(jù)介紹
通過(guò)http請(qǐng)求,需要安裝華視的網(wǎng)站服務(wù),因此我會(huì)在請(qǐng)求服務(wù)之前檢查改服務(wù)是否存在,我們的數(shù)據(jù)也來(lái)自這個(gè)網(wǎng)站的get請(qǐng)求。循環(huán)get請(qǐng)求來(lái)獲取數(shù)據(jù),經(jīng)過(guò)我的測(cè)試2秒一次循環(huán)比較合適。
三:代碼模塊介紹
服務(wù)端循環(huán)get請(qǐng)求數(shù)據(jù),通過(guò)事件注冊(cè),一旦數(shù)據(jù)和上次不同就通知調(diào)用我模塊的客戶端,也就是發(fā)生取身份證動(dòng)作和放身份證動(dòng)作時(shí)及時(shí)發(fā)聵給客戶端。客戶端拿到的身份證信息進(jìn)行實(shí)時(shí)更新。
四:獲取身份證模塊代碼
public class IDCardNetHttp
{
public bool OpenDevice()
{
//string openUrl = ConfigurationManager.AppSettings["OpenDevice"];
var client = new RestClient("http://127.0.0.1:19196/OpenDevice");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
//Console.WriteLine(response.Content);
return string.IsNullOrEmpty(response.Content) ? false : true;
}
public string ReadCard()
{
//string readUrl = ConfigurationManager.AppSettings["readcard"];
var client = new RestClient("http://127.0.0.1:19196/readcard");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
return response.Content;
}
public void CloseDevice()
{
//string closeUrl = ConfigurationManager.AppSettings["CloseDevice"];
var client = new RestClient("http://127.0.0.1:19196/CloseDevice");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
//Console.WriteLine(response.Content);
}
private bool IsExistServer(string serviceName)
{
bool result = false;
ServiceController[] controllers = ServiceController.GetServices();
int nNum = controllers.Length;
try
{
for (int i = 0; i <= (nNum - 1); i++)
{
if ((controllers[i].ServiceName.ToUpper() == serviceName.ToUpper()))
{
result = true;
break;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
result = false;
}
return result;
}
public event EventHandler<MyEventArgs> IDCardChangeNotify;
public void GetIDCard()
{
if (IsExistServer("華視電子身份證讀卡器服務(wù)"))
{
if (OpenDevice())
{
IDCardMessage idcard = new IDCardMessage() { certNumber = "" };
Task.Factory.StartNew(() =>
{
CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
while (!cancelTokenSource.IsCancellationRequested)
{
IDCardMessage message = JsonConvert.DeserializeObject<IDCardMessage>(ReadCard());
if (idcard.certNumber != message.certNumber)
{
idcard = message;
IDCardChangeNotify(this, new MyEventArgs(idcard));
}
Thread.Sleep(2000);
}
});
}
}
}
public class MyEventArgs : EventArgs
{
IDCardMessage _msg;
public MyEventArgs(IDCardMessage msg)
{
this._msg = msg;
}
public IDCardMessage Msg
{
get { return _msg; }
}
}
public class IDCardMessage
{
public string bornDay { get; set; }
public string certAddress { get; set; }
public string certNumber { get; set; }
public string certOrg { get; set; }
public string certType { get; set; }
public string effDate { get; set; }
public string errorMsg { get; set; }
public string expDate { get; set; }
public string gender { get; set; }
public string identityPic { get; set; }
public string nation { get; set; }
public string nationCode { get; set; }
public string partyName { get; set; }
public string resultFlag { get; set; }
}
~IDCardNetHttp()
{
CloseDevice();
}
}
五:客戶端調(diào)用我的模塊
static void Main(string[] args)
{
IDCardNetHttp Evet = new IDCardNetHttp();
Evet.IDCardChangeNotify += IDCardCallBack;
Evet.GetIDCard();
Console.ReadKey();
}
private static void IDCardCallBack(object sender, IDCardEvent.MyEventArgs e)
{
Console.WriteLine("狀態(tài)改變:"+e.Msg.certNumber.ToString());
}
總結(jié)
以上是生活随笔為你收集整理的华视身份证阅读器100UC HTTP模式二次开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大使和州长哪个级别高(中国驻外大使年薪)
- 下一篇: iOS开发之微信平台分享