nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)

from: http://wszf.net/archives/2012/11/07/80510.html

一般来说,给予MifareClassic的射频卡,一般内存大小有3种:

1K: 16个分区(sector),每个分区4个块(block),每个块(block) 16个byte数据

2K: 32个分区,每个分区4个块(block),每个块(block) 16个byte数据

4K:64个分区,每个分区4个块(block),每个块(block) 16个byte数据

对于所有基于MifareClassic的卡来说,每个区最后一个块叫Trailer,16个byte, 主要来存放读写该区的key,可以有A,B两个KEY,每个key长6byte,默认的key一般是FF 或 0,最后一个块的内存结构如下:

Block 0  Data 16bytes

Block 1  Data 16 bytes

Block 2  Data 16 bytes

Block 3  Trailer 16 bytes

Trailer:

Key A: 6 bytes

Access Conditions: 4 bytes

Key B: 6 bytes

M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,)存贮结构如右表所示

0

块0

数据块

0

块1

数据块

1

块2

数据块

2

块3

密码A存取控制    密码B

数据块

3

1

块0

数据块

4

块1

数据块

5

块2

数据块

6

块3

密码A存取控制    密码B

数据块

7

15

块0

数据块

60

块1

数据块

61

块2

数据块

62

块3

密码A存取控制    密码B

数据块

63

第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。

每个扇区的块0、块1、块2为数据块,可用于存贮数据。

每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:

A1A2 A3 A4 A5               FF 07 8069               B0 B1 B2 B3 B4 B5

密码A(6字节)          存取控制(4字节)          密码B(6字节)

每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制;

存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的。工作原理:

读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与讯写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。

Android 读写M1卡

先了解一下MifareClassic协议

在android sdk 的文档中,描述道 “allMifareClassicI/O operations will be supported, andMIFARE_CLASSICNDEF tags will also be supported. In either case,NfcAwill also be enumerated on the tag, because all MIFARE Classic tags are alsoNfcA.” 所以说NFCA协议是兼容MifareClassic 协议的, 我们可以通过NfcA在android的相关类来处理给予MifareClassic 的RFID卡。

读M1卡代码:

01

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action))

02

{

03

// 3) Get an instance of the TAG from the NfcAdapter

04

Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

05

// 4) Get an instance of the Mifare classic card from this TAG

06

// intent

07

mfc = MifareClassic.get(tagFromIntent);

08

if(mfc!=null)

09

{

10

Toast.makeText(this,"检测到卡片,读卡中。。。", Toast.LENGTH_SHORT).show();

11

try

12

{

13

mfc.connect();

14

boolean auth =false;

15

auth = mfc.authenticateSectorWithKeyA(15,"passwo".getBytes());//验证密码

16

if (auth)

17

{

18

card_number_edittext.setText(new String(mfc.readBlock(60)));//读取M1卡的第60块即15扇区第0块

19

password_edittext.requestFocus();

20

}

21

}catch (Exception e)

22

{

23

if(BuildConfig.DEBUG)

24

{

25

e.printStackTrace();

26

}

27

28

}

29

}

30

}// End of method

写M1卡代码:

01

try

02

{

03

mfc.connect();

04

boolean auth =false;

05

short sectorAddress =1;

06

auth = mfc.authenticateSectorWithKeyA(sectorAddress, MifareClassic.KEY_DEFAULT);

07

if (auth)

08

{

09

// the last block of the sector is used for KeyA and KeyB cannot be overwritted

10

mfc.writeBlock(4,"1383838438000000".getBytes());//必须为16字节不够自己补0

11

mfc.close();

12

Toast.makeText(MainActivity.this,"写入成功", Toast.LENGTH_SHORT).show();

13

}

14

}catch (IOException e)

15

{

16

// TODO Auto-generated catch block

17

e.printStackTrace();

18

}finally

19

{

20

try

21

{

22

mfc.close();

23

}catch (IOException e)

24

{

25

// TODO Auto-generated catch block

26

e.printStackTrace();

27

}

28

}

Demo下载地址:NFCDemo

参考资料:1/2/3/4/5

posted on 2012-12-25 11:47 汪杰 阅读(12494) 评论(3)  编辑 收藏 引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android8 通知呼吸灯_Android8.0及以上的Notification

这篇文章上次修改于 702 天前,可能其部分内容已经发生变化,如有疑问可询问作者。在新版本上(Android8.0及以上)开发时,会遇到一些问题,比如,不显示通知,Notification 声音不可控,删除 channel 删…

harmonyos公测招募,nova为主 HarmonyOS 2.0开发者Beta公测再招募

原标题:nova为主 HarmonyOS 2.0开发者Beta公测再招募HarmonyOS 2.0开发者Beta公测招募将开启第二期,本次公测活动主要针对的机型是华为nova系列。活动报名时间为5月9日-5月17日。【PChome手机频道资讯报道】华为方面在4月份开启了HarmonyOS 2.0开发者Bet…

队列总结

什么是队列 队列(Queue):具有一定操作约束的线性表 插入和删除操作:只能在一端插入,而在另一端删除 数据插入:入队列(AddQ) 数据删除:出队列(DeleteQ) 先来先服务 先…

python连接mongodb进行查询_Python中的MongoDB基本操作:连接、查询实例

这篇文章主要介绍了Python中的MongoDB基本操作:连接、查询实例,本文直接给出操作示例代码,需要的朋友可以参考下MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用&#…

D P- 免费馅饼

题目 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以ga…

android+录像中截图软件下载,录屏截图大师app

录屏截图大师app是一款专业录屏软件,不少用户可能会有使用手机录屏的需求,尤其是在手机内置没有录屏功能的时候,这款软件就非常值得大家考虑,支持自定义设置录屏的大小和画质,还没有水印,还支持后期的简单编…

python随机函数笔记_Python笔记__random

random模块提供了随机数相关的一些函数,所有函数都绑定在一个random.Random类的实例上,所以,你可以直接用模块级的函数random.xxx(),也可以random.Random().xxx()。random.random(): 随机生成一个[0.0, 1.0)范围内的浮点数。是下面…

一加桌面3.0 android8,一加手机XRemix6.0安卓8.1.0Beta2.0定制本地化增强适配归属农历等...

制作者:moonlight-roms基于版本:remix最新安卓8.1.0代码适合机型:一加手机X双网版/全网通版/E1001/E1003等/onyx注意事项:1.开机后语言设置:Settings-system-languageandinput-添加一个中文需要并拖动到第一行设置为默…

震惊!Fibonacci Again

题目 There are another kind of Fibonacci numbers: F(0) 7, F(1) 11, F(n) F(n-1) F(n-2) (n>2). Input Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000). Output Print the word “yes” if 3 divide evenly into …

jumpserver 使用教程_Jumpserver之快速入门

一&#xff0c;系统设置1.1基本设置修改 url 的"localhost"为你的实际 url 地址, 否则邮件收到的地址将为"localhost" 也无法创建新用户1.2邮件设置1.3终端设置保持默认设置即可1.4安全设置根据需要设置二.用户管理2.1创建jumpserver用户#点击页面左侧&quo…

华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...

原标题&#xff1a;鸿蒙智慧屏首秀&#xff1a;逾10万人预定&#xff0c;电视视频通话功能强大上周五&#xff0c;大家期待已经的华为开发者大会正式召开&#xff0c;华为鸿蒙系统在这一天对外发布。历时数年&#xff0c;经过几千人的研发&#xff0c;终于正式落地。曾经&#…

震惊! Leftmost Digit

题目 Given a positive integer N, you should output the leftmost digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contain…

ladp3 获取属性_Ldap3库使用方法(四)

#!/usr/bin/env python# -*- coding: utf-8 -*-import jsonfrom ldap3 import ALL_ATTRIBUTES# 注意&#xff1a;ldap3库如果要使用tls(安全连接)&#xff0c;需要ad服务先安装并配置好证书服务&#xff0c;才能通过tls连接&#xff0c;否则连接测试时会报LDAPSocketOpenError(…

两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理

对于一个富文本编辑器来说&#xff0c;图文混排是最基本的功能。而从上一篇文章中我们知道图文混排需要使用ImageSpan。下面这段代码摘自我的RichEditText源码&#xff1a;/*** 添加图片* param filePath 图片文件路径*/public void addImage(String filePath) {SpannableStrin…

qt添加菜单纯代码_Qt Creator 插件开发(3):添加菜单项

本章我们将学习如何向 Qt Creator 的菜单栏添加内容。在上一章插件的基础之上&#xff0c;我们将尝试开发一个比较正式的插件——在菜单栏中可以看到&#xff0c;并且可以相应用户动作等。在我们开始之前&#xff0c;我们先来看看 Qt Creator 已有的菜单&#xff1a;Qt Creator…

android添加hidl,android hidl

1、定义.hal接口文件&#xff0c;如&#xff1a;在vendor/sprd/interface中新建目录hello&#xff0c;其中定义好hidl接口&#xff0c;如&#xff1a;1 package [email protected]1.0;23 interfaceIHello {45 helloWorld(string name) generates (stringresult);67 };2、利用hi…

震惊! Rightmost Digit 快速幂解决

题目 Given a positive integer N, you should output the most right digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case conta…

rrpp协议如何修改_RRPP协议

产生背景在网络规划和实际组网应用中&#xff0c;大多采用环网来提供高可靠性。环网技术简单来说&#xff0c;就是将一些网络设备通过环的形状连接到一起&#xff0c;实现相互通信的一种技术。为了避免环网中产生广播风暴&#xff0c;最初采用了已被普遍应用的STP协议环路保护机…

android handler同步,android解决:使用多线程和Handler同步更新UI

如果运行时&#xff0c;可以看到滚动条由条慢慢变短&#xff0c;则说明程序成功了。截图如下&#xff0c;建议选择大点的文件做测试。main.xmlxmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"wrap_content" android:id&…

hashmap hash冲突怎么解决_HashMap原理及冲突之简谈

了解HashMap原理对于日后的缓存机制多少有些认识。在网络中也有很多方面的帖子&#xff0c;但是很多都是轻描淡写&#xff0c;很少有把握的比较准确的信息&#xff0c;在这里试着不妨说解一二。对于HashMap主要以键值(key-value)的方式来体现&#xff0c;笼统的说就是采用key值…