华视身份证阅读器100UC HTTP模式二次开发
生活随笔
收集整理的這篇文章主要介紹了
华视身份证阅读器100UC HTTP模式二次开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:前言
設備已經安裝好100UC的USB驅動,設備能正常工作
二:獲取數據介紹
通過http請求,需要安裝華視的網站服務,因此我會在請求服務之前檢查改服務是否存在,我們的數據也來自這個網站的get請求。循環get請求來獲取數據,經過我的測試2秒一次循環比較合適。
三:代碼模塊介紹
服務端循環get請求數據,通過事件注冊,一旦數據和上次不同就通知調用我模塊的客戶端,也就是發生取身份證動作和放身份證動作時及時發聵給客戶端??蛻舳四玫降纳矸葑C信息進行實時更新。
四:獲取身份證模塊代碼
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("華視電子身份證讀卡器服務"))
{
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();
}
}
五:客戶端調用我的模塊
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("狀態改變:"+e.Msg.certNumber.ToString());
}
總結
以上是生活随笔為你收集整理的华视身份证阅读器100UC HTTP模式二次开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大使和州长哪个级别高(中国驻外大使年薪)
- 下一篇: iOS开发之微信平台分享