由下面这个表最终可以判断出卡的类型和卡的大小,如get函数




Get()
生成MifareClassic对象


当发现TAG时,返回SAK/SEL_RES 字节,没有引起RF感应及阻塞。
getSak() 


switch (a.getSak()) 
case 0x01:
case 0x08:
  mType = TYPE_CLASSIC;
    mSize = SIZE_1K;
case 0x09:
  mType = TYPE_CLASSIC;
  mSize = SIZE_MINI;
case 0x10:
    mType = TYPE_PLUS;
    mSize = SIZE_2K;
case 0x11:
    mType = TYPE_PLUS;
    mSize = SIZE_4K;
case 0x18:
    mType = TYPE_CLASSIC;
    mSize = SIZE_4K;
case 0x28:
    mType = TYPE_CLASSIC;
    mSize = SIZE_1K;
    mIsEmulated = true;
case 0x38:
    mType = TYPE_CLASSIC;
    mSize = SIZE_4K;
    mIsEmulated = true;
case 0x88:
    mType = TYPE_CLASSIC;
    mSize = SIZE_1K;
case 0x98:
case 0xB8:
    mType = TYPE_PRO;
    mSize = SIZE_4K;
}
getType()
获取卡的类型
getSize()
获取卡的大小
isEmulated()
判断是否是仿真卡
getSectorCount()
获取扇区大小


getBlockCount()
获取块的总数


getBlockCountInSector(int sectorIndex)
返回给定扇区的块数量


blockToSector(int blockIndex)
由块区返回扇区的索引值


sectorToBlock(int sectorIndex)
返回扇区的一个块


Authenticate(int sector, byte[] key, boolean keyA)
扇区密钥认证
封装发送的命令
cmd[0]=0x60/keyA;0x61/KeyB
cmd[1] =扇区第一个块
cmd[2]=TAG ID号 
cmd[6]=键值
transceive(cmd, false)发送命令给TAG


readBlock(int blockIndex) 
当认证完后可以读取扇区的内容
读取指定块的内容
byte[] cmd = { 0x30, (byte) blockIndex };
transceive(cmd, false);


读取的数据必须是16位的。
如果小于16位的则报错。
大于16位的可以将拷贝前16位数据。
例如:byte[] blockBytesTmp = Arrays.copyOf(blockBytes,16);


writeBlock(int blockIndex, byte[] data)
cmd[0] = (byte) 0xA0;写命令
cmd[1] = (byte) blockIndex;块区
System.arraycopy(data, 0, cmd, 2, data.length);写的数据
transceive(cmd, false);发送命令


increment(int blockIndex, int value) 
增加块并存储值
ByteBuffer cmd = ByteBuffer.allocate(6);
cmd.order(ByteOrder.LITTLE_ENDIAN);
cmd.put( (byte) 0xC1 ); 命令
cmd.put( (byte) blockIndex );
cmd.putInt(value);
transceive(cmd.array(), false); 发送命令


decrement(int blockIndex, int value)
ByteBuffer cmd = ByteBuffer.allocate(6);
cmd.order(ByteOrder.LITTLE_ENDIAN);
cmd.put( (byte) 0xC0 );
cmd.put( (byte) blockIndex );
cmd.putInt(value);
transceive(cmd.array(), false);


参考文档
http://nfc-tools.org/index.php?title=ISO14443A
MifareClassic.java


时间:

起草于2015-10-15




更多相关文章

  1. android获取视频每一帧
  2. 抓包工具 Fiddler抓包之后的数据分析
  3. android:OKHttp的使用
  4. android logcat 命令详解
  5. Android(安卓)SDK Tools 命令行攻略
  6. Android之通过HTTP协议向服务器发送XML数据
  7. android 绕过R文件,通过代码获取styleable的属性
  8. Android仿qq侧滑——上
  9. android6.0 Phone源码分析之Phone适配过程

随机推荐

  1. 第八章 Android(安卓)开发常见的UI布局
  2. android 小知识
  3. Windows下Android平台搭建_2
  4. 控件的android:layout_alignParentTop属
  5. android 资源
  6. android XMl 解析神奇xstream 六: 把集合l
  7. Android Drawable Resources系列9:
  8. android的SDK----google中的翻译
  9. Android(安卓)- Android(安卓)Architectu
  10. [Android]解决EditText设置成密码模式改