Mifare Ultra Light 非接触式IC卡发卡总结
概述:
1、 容量512bit,分为16个page,每个page占4byte
2、 每个page可以通过编程的方式锁定为只读功能
3、 384位(从page4往后)用户读写区域
4、 唯一7字节物理卡号(page0前3个byte加page1)
存储结构:
页号 |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
说明 |
0 |
SN0 |
SN1 |
SN2 |
BCC0 |
只读,存放卡的序列号:Page0前3字节+整个Page1 |
1 |
SN3 |
SN4 |
SN5 |
SN6 |
|
2 |
BCC1 |
保留 |
LOCK0 |
LOCK1 |
只读,通过设置LOCK0和LOCK1可以讲16个page设为只读 |
3 |
OTP0 |
OTP1 |
OTP2 |
OTP3 |
可读写,一次性交易计数器,不可逆 |
4 |
Data0 |
Data1 |
Data2 |
Data3 |
可读写,数据存放区域 |
5 |
Data0 |
Data1 |
Data2 |
Data3 |
|
6 |
Data0 |
Data1 |
Data2 |
Data3 |
|
7 |
Data0 |
Data1 |
Data2 |
Data3 |
|
8 |
Data0 |
Data1 |
Data2 |
Data3 |
|
9 |
Data0 |
Data1 |
Data2 |
Data3 |
|
10 |
Data0 |
Data1 |
Data2 |
Data3 |
|
11 |
Data0 |
Data1 |
Data2 |
Data3 |
|
12 |
Data0 |
Data1 |
Data2 |
Data3 |
|
13 |
Data0 |
Data1 |
Data2 |
Data3 |
|
14 |
Data0 |
Data1 |
Data2 |
Data3 |
|
15 |
Data0 |
Data1 |
Data2 |
Data3 |
总的来说,你可以把UltraLight卡简单地看成是一种存储介质,对它的操作也就是对扇区中每个Page的读取和写入的过程。
UltraLight卡的发卡流程:
第一步:寻卡
dc_card(icdev, cardMode, snr)
dc_anticoll2(icdev, 0, snr2)
dc_select2(icdev, snr2, size)
第二步:写卡
获得想要写入卡片的数据(十六进制字符串形式),调用dc_write_hex函数,写入对应page
关于这个函数有个比较怪的问题,文档中规定,对于Ultralight卡,一次必须写入4个字节,也就是一个Page,但你仍需将你写入的数据以后补0的方式补足16字节,尽管它实际写入的只是前4个字节。自己写的功能函数:
''' <summary>''' 将进制串写入指定地址的卡片内存中''' </summary>''' <param name="start">要写入的起始块地址</param>''' <param name="finish">要写入的结束块地址</param>''' <param name="dataBufHex">要写入的串</param>''' <returns>写卡是否成功</returns>''' <remarks></remarks>Private Function Write(ByVal start As Short, ByVal finish As Short, ByVal dataBufHex As String)Dim i As Byte '循环标记Write = False'假设dataBufHex为字8节,start为4,finsh为5,但对Ultralight来说,一次只能写4个字节,即'一次只能写一个块,因此需要分两次来写。虽然每次只能写四个字节,但'dc_write_hex函数规定写入的数据必须为16字节,因此需要做右补0操作For i = 0 To (finish - start)Dim tmp As Stringtmp = Mid(dataBufHex, i * 8 + 1, 8)'补0If Len(tmp) < 32 Thentmp = tmp & New String("0", 32 - Len(tmp))End IfLog("往Page" & (start + i) & "中写数据:" & tmp)st = dc_write_hex(icdev, start + i, tmp)If (st <> 0) Then '写卡失败Write = FalseExit FunctionEnd IfNextWrite = True
End Function
第三步:读卡
发好卡后,需要验证写入的数据是否正确,这时你就需要调用dc_read_hex函数读入卡片中的数据,有例子:
st = dc_read_hex(icdev, address, dataBufHex)
这里icdev是通讯设备标识符,address是要读入的起始页地址,dataBufHex是存放读入数据的变量。
dc_read_hex函数一次性读入16字节数据,因此dataBufHex字符串长度最长为32,但是不管你的dataBufHex设成任何长度(只要不大于32),该函数仍然读出16字节数据,只不过它会截取前面的部分放到dataBufHex中返还给你罢了。
其他:
关于发行验证码和交易TAC的计算方法,等过几天总结了CPU卡和M1卡的发卡流程之后再写出来。还有就是卡片的应用,我发的UltraLight是拿来作为单程票的,它的消费充值等流程是由其他人来做的,而且跟具体的卡结构有关,不好讲。
转载于:https://www.cnblogs.com/chenguanwei/archive/2011/01/07/1930169.html
Mifare Ultra Light 非接触式IC卡发卡总结相关推荐
- Mifare Ultra Light 非接触式IC卡
概述: 1. 容量512bit,分为16个page,每个page占4byte 2. 每个page可以通过编程的方式锁定为只读功能 3. 384位(从page4往后)用户读写区域 4. 唯一7字 ...
- Mifare One 非接触式IC卡介绍
贴一篇关于Mifare1的介绍 Mifare l卡特性简介 M1卡为8K位的非接触式IC卡. 电气特性 l 容量为8K位EEPrOM l 分为16个扇区,每个扇区为4块 ...
- 非接触式IC卡存储结构
非接触式IC卡Contactless Smart Card(CSS),也称作感应卡.射频卡,由IC芯片.感应天线组成,并完全密封在一个标准PVC卡片中, 无外露部分,其结构示意图如下. 非接触IC卡工 ...
- 磁条卡,接触式IC卡,非接触式IC卡的优缺点
磁条卡的特点: 磁条卡由于其结构简单,存储容量小,安全保密性差,读写设备复杂且维护费用高,作为七.八十年代技术水平的产品已风光不再,即将面临淘汰. 智能IC卡与磁条卡相比有哪些优势? 接触式IC卡与磁 ...
- 全球与中国非接触式IC卡芯片市场现状及未来发展趋势2022
根据QYR(恒州博智)的统计及预测,2021年全球非接触式IC卡芯片市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看,中国市场 ...
- 非接触式IC卡与条码卡磁卡接触式IC卡相比较
一.最新技术-非接触IC卡 非接触IC卡,又名感应卡,诞生于90年代初,由于存在着条码卡.磁卡和接触式IC卡不可比拟的优点,使之一经问世,便立刻引起了广泛的关注,并以惊人的速度得到推广应用. 非接触式 ...
- iso14443 非接触式IC卡协议
转自百度百科 http://baike.baidu.com/link?url=Y1koEW6mX0AgDV5kt37i7M5RaV0g_WwxU163dO-VKUbR5w4qEHv0OMOnbw1BT ...
- S50非接触式IC卡 学习笔记
S50非接触式IC卡性能简介(M1) 一. 主要指标 l 容量为8K位EEPROM(1K 字节) l 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 l 每个扇区有独立的一组密码及访问 ...
- 非接触式IC卡性能简介(M1)
卡片的电气部分只由一个天线和ASIC组成. 天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中. ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个 8K ...
最新文章
- 使用Vue时localhost:8080中localhost换成ip地址后无法显示页面的问题
- 单片机c语言编译软件6,eUIDE下载-单片机c语言编译器 v1.07.32.23 官方版 - 安下载...
- QPW 企业员工表(tf_company_employee)
- WinForm部署问题
- Registry注册机制
- mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解
- 如何避免JDBC内存溢出问题
- SQLALchemy (ORM工具)[PostgreSQL为例]
- 6章:常用工具类以及函数
- python利器-python利器app下载-python利器手机版 _5577安卓网
- 并发-2-Thread和Runnable的API
- Xilinx zynqmp VCU使用
- C++ opencv viz位姿可视化
- vue引入echarts-liquidfill水滴图并批量动态加载
- 微前端究竟是什么?微前端核心技术揭秘!
- SSTV 建伍TK8185 连接电脑
- 在系统grub.cfg里面设定关闭 aspm
- 廖雪峰的GIT教程-读书笔记
- 男人也勾魂(航爷钦定题目,汗!)
- javascript模块化的前世今生
热门文章
- linux非权限安装bioperl,BioPerl安装指南:Unix/Linux/Windows下的安装
- html 幻灯禁止上下滑动,幻灯片滑动Immersive Slider
- eclipse注释模板_Intellij IDEA设置默认文档注释
- 角谷定理python输出变化过程,Python 100例——第十章----定理与猜想
- python flask web开发 可视化开发_python web开发之——Flask入门教程
- 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
- dns的服务器地址是多少当前位置,dns的服务器地址设置为多少
- while(true) 循环中使用了sleep休眠了半小时就中断了_线程中断不是你想中断就能的...
- 计算机辅助分析及应用论文,故障树计算机辅助分析及应用研究-机械制造及自动化专业论文.docx...
- html input日期值,input标签设置时间值