IC芯片卡读写类(泛型模式)
//财源广进微信会员卡管理系统internal partial class V6 : IReader{/// <summary>/// 自动获取端口号/// </summary>/// <returns></returns>public int GetPort(){for (int i = 0; i < 10; i++){int s = ic_init(i, 9600);if (s > 0){ic_exit(s); ic_exit(0);return i;}}return -1;}/// <summary>/// 连接设备/// </summary>/// <typeparam name="T"></typeparam>/// <param name="success"></param>/// <param name="dev"></param>/// <returns></returns>public T Connect<T>(Device dev, Func<int, T> success) where T : Result, new(){if (dev.Port < 0)return new T { ErrMsg = $"读卡器连接失败,端口{dev.Port}错误" };int icdev = ic_init(dev.Port, dev.Rate);if (icdev == -149)return new T { ErrMsg = $"读卡器连接失败,端口{dev.Port + 1}占用" };if (icdev < 0)return new T { ErrMsg = "读卡器连接失败,检查是否设置或者连接好" };//蜂鸣提示//dv_beep(icdev, 10);short status = 0;get_status(icdev, ref status);T res;if (status == 0){res = new T { ErrMsg = "请注意:未插入卡片" };}else{//验证密码是否正确var pwd = Encoding.Default.GetBytes(dev.newpwd);var i = csc_4442(icdev, 3, ref pwd[0]);if (i != 0){res = new T { ErrMsg = "请注意:密码验证失败" };}else{//res = readData(icdev) as T;res = success.Invoke(icdev);}}//关闭设备ic_exit(icdev);ic_exit(0);return res;}/// <summary>/// 读卡/// </summary>/// <param name="dev"></param>/// <returns></returns>public Card Read(Device dev){return Connect(dev, icdev => IC_readData(icdev));}/// <summary>/// 写卡/// </summary>/// <param name="dev"></param>/// <param name="data"></param>/// <param name="WriteType"></param>/// <returns></returns>public Result Write(Device dev, Card data, WriteType WriteType){return Connect(dev, icdev =>{//写卡操作if (WriteType == WriteType.验证写卡){var card = IC_readData(icdev);if (card.IsSuccess == false){return card;}else if (card.CardId != data.CardId || card.CardNumber != data.CardNumber){return new Card { ErrMsg = "卡号与芯片不匹配" };}else{//正式写入卡内数据return new Result { ErrMsg = "写入芯片数据", IsSuccess = IC_writeData(icdev, data) };}}else if (WriteType == WriteType.新卡写卡){return new Result { ErrMsg = "写入芯片数据", IsSuccess = IC_writeData(icdev, data) };}return new Result { ErrMsg = "暂未支持此功能" };});}/// <summary>/// 根据对象写入芯片数据/// </summary>/// <param name="icdev"></param>/// <param name="data"></param>/// <returns></returns>private bool IC_writeData(int icdev, Card data){byte[] buffer = new byte[223];int START = 32;Encoding.Default.GetBytes(data.CardId).CopyTo(buffer, 位置- START);var i = swr_4442(icdev, 32, buffer.Length, ref buffer[0]);return (i == 0);}/// <summary>/// 获取字符串/// </summary>/// <param name="buffer"></param>/// <param name="start">开始</param>/// <param name="len">长度</param>/// <returns></returns>private string GetStrByBuffer(byte[] buffer, int start, int len){byte[] data = new byte[len];Buffer.BlockCopy(buffer, start - 32, data, 0, len);bool zero = false;for (int i = 0; i < data.Length; i++){if (data[i] == '\0') zero = true;if (zero) data[i] = (byte)'\0';}var result = Encoding.Default.GetString(data.ToArray()).Trim();result = result.Replace("\0", "");return result;}/// <summary>/// 读取芯片数据/// </summary>/// <param name="icdev"></param>/// <returns></returns>private Card IC_readData(int icdev){Card res = new Card();//一次读取所有数据var buffer = new byte[223];srd_4442(icdev, 32, buffer.Length, ref buffer[0]);var s1 = GetStrByBuffer(buffer, XX, 20);var s2 = GetStrByBuffer(buffer, XX, 20);if (s1.Length == 0 || s2.Length == 0){res = new Card { ErrMsg = "芯片读取失败,建议重新读卡" };}else{res = new Card{CardId = GetStrByBuffer(buffer, 位置, 10),Balance = double.Parse(s1),Point = double.Parse(s2),IsSuccess = true,};//writeData(icdev, res, buffer);}return res;}}
public class Device{public int Rate { get; set; } = 9600;public int Port { get; set; }public string Model { get; set; }public string newpwd { get; set; };public string oldpwd { get; set; };}
internal class Result{public bool IsSuccess { get; set; }public string ErrMsg { get; set; }}
IC芯片卡读写类(泛型模式)相关推荐
- c语言读写nfc,Android NFC M1卡读写芯片卡读写(CPU卡读写)(RFID读写)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/sgn5200/article/deta ...
- 公交IC卡读写器设计指南
采用PHILIPS公司的Mifaue卡作IC卡,设计以射频技术为核心,以单片机为控制器的IC卡读写器在公交自动收费系统中的应用.制作的IC卡读写器可以实现制卡.售卡.自动收费等功能,具有安全.实用.方 ...
- 下一代IC芯片卡将加密提升安全性能
目前,各银行正在逐步推广IC芯片卡,具有NFC功能的手机在4厘米距离内可以读出卡号及最近10次交易记录,这让不少市民担心银行IC卡的安全问题和隐私问题.此事经成都商报报道后,中国银联技术专家首次对芯片 ...
- ic卡读写器有哪些分类?如何使用ic卡读写器?
ic卡读写器是读写器中的一种,通过ic卡读写器可对ic卡的信息进行读取.为增进大家对ic卡读写器的认识,本文将对ic卡读写器的分类.ic卡读写器的使用方法等内容予以介绍.如果你对ic卡读写器具有兴趣, ...
- IC卡读写器VB源代码
IC卡读写器VB使用界面 详细代码 '广州荣士电子有限公司,联系电话020-82318861,82322852,定制13826029618 网址http://www.icmcu.com '读卡函数声明 ...
- Windows操作系统下用vmware虚拟ubuntu系统测试USB IC卡读写器的说明
读写器介绍:RFID读写器NFC发卡器WEB可编程NDEF文本/网址/智能海报/电话/启动-淘宝网 (taobao.com) 一.打开windows计算机管理 / 服务 / VMware USB Ar ...
- IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告
银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本:银河麒麟桌面操作系统V10 厂商名称:广州荣士电子有限公司 认证产品:IC-14W网络IC卡读写器 测试日期:2022-11-04 麒 ...
- VC中海量文件读写类设计与应用(转)
VC中海量文件读写类设计与应用 沈瑞冰 摘要 本文阐述了海量文件读写的一般方法,并分析了该方法中存在的内存耗尽问题和解决办法,并就此设计了一个海量文件读写类,封装了海量文件读写操作,最后给出了一个 ...
- docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...
一.MySQL读写分离主从模式 1. 下载镜像 docker pull mysql 当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Communi ...
- java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能
基于ActiveX技术的ocx控件是实现网页上读写 IC卡的一个比较不错的方法,因为ocx是com组件,通过其发布的接口,IE可以实现所有的功能.ActiveX不仅能适应大部分编程语言,做到与编程语言 ...
最新文章
- 如何查看一个linux用户的口令保留策略
- 什么是 SAP vocabulary-based annotations
- [转]前端构建工具gulpjs的使用介绍及技巧
- java定时任务详解
- mysql 索引的统计
- 新建word 无法切换输入法_WORD系列-1认识与保存
- 2021永州高中高考成绩查询入口,邵阳高考成绩查询入口2021
- 注意Stream.Seek,如果想要重复使用Stream,注意用Seek复位
- 【数学建模】2018 A题 高温作业专用服装设计(8.22-8.24训练)
- 大芒果服务器外网登录时一直显示正在登录,mangos-mangos
- c语言数据类型转换规律,c语言,数据类型转换
- 夜神模拟器安装激活面具magisk教程
- POJ 3290 WFF 'N PROOF 英文少
- 松下gh6参数 松下gh6评测
- 计算机考试excel统计图怎么做,excel表格取数据做统计图-Excel如何制作统计数据...
- mcu 与电量计 BQ40Z80 通信,读取电芯电量
- tiny6410刷机教程
- JAVA和MySQL实现公交管理_java+ssh+mysql城市公交管理系统(源码+论文+开题+任务书+中期检查+ppt)...
- 2022年的第一篇程序人生。。。
- 生成pdf带跳转的书签