RC531 读二代身份证8字节UID命令是什么?
1,我发送 status = M531PiccRequestB(PICC_REQBWUP,0,0,ReadBuf); // ReqB with 1 slot每次返回都是0xFF
我发送的是05 0000 3字节
下面选卡等也不好往下
第一步就卡住了。
读type a的 M1 S50卡 倒是没问题 说明硬件还有最底层的接口也肯定过了 while(1)
{
// IS014443B
/*
当完成MF RC531复位和初始化之后,读卡模块天线产生高频磁场,并循环发送REQB命令
“0x05 0x00 0x00”,对“二代证”进行询卡操作。当“二代证”靠近读卡模块天线,距离在
100mm以内时,“二代证”内部的线圈接收到读卡模块天线发出的磁场能量,产生感应电压对
“二代证”内部芯片进行供电。当“二代证”内部芯片正常工作并接收到读卡模块发送的REQB
命令后,会返回12个字节的卡类型代码给读卡模块。
5000000000D1038605008080
询卡成功后,读卡模块发送SELECT命令“0x1D 0x00 0x00 0x00 0x00 0x00 0x08 0x01 0x08”
,对“二代证”进行选卡操作,这时“二代证”会返回状态码。最后读卡模块发送GUID命令“0x00
0x36 0x00 0x00 0x08”,读取“二代证”的8字节的唯一序列号UID。
*/
M500PcdConfigISOType(TYPEB);
status = M531PiccRequestB(PICC_REQBWUP,0,0,ReadBuf); // ReqB with 1 slot
if(status==MI_OK || status==MI_COLLERR) //这里就开始错误 一直是0XFF
{
if(status == MI_COLLERR) // more then 1 card
{
char M500PcdConfigISOType(unsigned char type)
{
if(type==TYPEA)
{
WriteIO(RegTxControl,0x5b); // Force100ASK, TX1 & TX2 enable
WriteIO(RegCoderControl,0x19); // Miller coding, 106kbps
WriteIO(RegRxControl1,0x73);
WriteIO(RegDecoderControl,0x08); // Manchester Coding
WriteIO(RegCRCPresetLSB,0x63); // set CRC preset to 0x6363
WriteIO(RegCRCPresetMSB,0x63);
WriteIO(RegRxThreshold,0x88); // set max MinLevel & ColLevel.
TYPE = TYPEA;
}
else
{ /*
WriteIO(RegTxControl,0x4b); // disable Force100ASk
WriteIO(RegCoderControl,0x20); // NRZ-L, TypeB baud 106kbps
WriteIO(RegRxControl1,0x73); //
WriteIO(RegDecoderControl,0x19); // BPSK coding
WriteIO(RegCRCPresetLSB,0xff); // set CRC preset to 0xffff
WriteIO(RegCRCPresetMSB,0xff);
WriteIO(RegTypeBFraming,0x23); // EGT=0
WriteIO(RegBPSKDemControl,0x3e); // ignore EOF, on amp. detect
WriteIO(RegModConductance,0x06); // set modulation index at 12%
WriteIO(RegRxThreshold,0x44);// Reduce MinLevel & ColLevel.
// Increase higher nibble if carrier
// present but not detect
*/ //源码
//ISO14443B电子标签 JB8_NE64_RC531
//第2页 传送器与编码器控制
WriteIO(RegTxControl, 0x4b); //0x4b, 13.56MHz
WriteIO(RegCwConductance, 0x3f); //0x3f, 设置输出驱动的电导系数
WriteIO(RegModConductance, 0x06); //0x06, 幅移键控ASk 12%
WriteIO(RegCoderControl, 0x20); //0x20, TypeB,波特率106kbps, NRZ编码
WriteIO(RegTypeBFraming, 0x23); //0x23, 定义ISO14443B帧格式
//第3页 接收器与解码器控制
WriteIO(RegDecoderControl, 0x19); //0x19, ISO14443B帧,BPSK编码
WriteIO(RegRxThreshold, 0x44); //0x44, 可接收的最小信号强度
WriteIO(RegBPSKDemControl, 0x3e); //0x3e, 忽略EOF,打开高通滤波
WriteIO(RegClockQControl, 0x07); //0x3f, Q时钟控制
//第4页 射频时间和通道冗余
WriteIO(RegRxWait, 0x06); //0x06, 设置接收延时
WriteIO(RegChannelRedundancy, 0x2c); //0x2c, TypeB接收冗余校验
WriteIO(RegCRCPresetLSB, 0xff); //0xff, CRC预设值
WriteIO(RegCRCPresetMSB, 0xff); //0xff, CRC预设值
TYPE = TYPEB;
}
return MI_OK;
}
//////////////////////////////////////////////////////////////////////
// E X C H A N G E B Y T E S T R E A M
///////////////////////////////////////////////////////////////////////
char ExchangeByteStream(unsigned char Cmd,
unsigned char *send_data,
unsigned char send_bytelen,
unsigned char *rec_data,
unsigned char *rec_bytelen)
{
signed char status = MI_OK;
FlushFIFO(); // empty FIFO
ResetInfo(MInfo); // initialise ISR Info structure
if (send_bytelen > 0)
{
memcpy(MSndBuffer,send_data,send_bytelen); // write n bytes
MInfo.nBytesToSend = send_bytelen;
// write load command
status = M500PcdCmd(Cmd, //这里进入实际发送函数后 接收返回一直是0xff
MSndBuffer,
MRcvBuffer,
&MInfo);
if ( status == MI_OK )
{
*rec_bytelen = MInfo.nBytesReceived;
if (*rec_bytelen)
{
memcpy(rec_data,MRcvBuffer,MInfo.nBytesReceived);
}
}
}
else
{
status = MI_WRONG_PARAMETER_VALUE;
}
return status;
}
//////////////////////////////////////////////////////////////////////
// R E Q U E S T B
//////////////////////////////////////////////////////////////////////
char M531PiccRequestB(unsigned char req_code,
unsigned char AFI,
unsigned char N,
unsigned char *ATQB)
{
char status = MI_OK;
unsigned char rec_len;
WriteIO(RegChannelRedundancy,0x2C); // RxCRC and TxCRC enable, parity
// disable, ISO/IEC3390 enable
ClearBitMask(RegControl,0x08); // disable crypto 1 unit 加密单元关闭
SetBitMask(RegTxControl,0x03); // Tx2RF-En, Tx1RF-En enable
M500PcdSetTmo(5);
MSndBuffer = 0x05; // APf code
MSndBuffer = AFI; //
MSndBuffer = (req_code&0x08)|(N&0x07); // PARAM
MSndBuffer = 0; // ////////////////改成0
MSndBuffer = 0; // PARAM /////////////// 改成0
status = ExchangeByteStream(PCD_TRANSCEIVE,
MSndBuffer,
3,
ATQB,
&rec_len);
if (status!=MI_OK && status!=MI_NOTAGERR) status = MI_COLLERR; // collision occurs
if (status == MI_OK) M500PcdSetTmo(ATQB>>4); // set FWT
return status;
} xuexi 做过的来麻烦指导下~~ 兄弟,二代证的命令是加密的,需要加密模块才能完成,
你没发现卡片的UID都是0吗
并不完全兼容14443-B,是非标的, 这么说 网上卖的MCU+RC531读 8字节ID的 都是代码解密的?他们都没用专门解密模块啊
另外只读2代的 8字节ID 我查下来的资料是不需要解密模块的
目前我 连00 都收不到、发了询卡 一点反应也没
有点晕我了~~ 是这样的,二代证是应答标准的REQB指令的,但Attrib指令是非标的,这一点我没深入研究,也许不对,
如果你的没收到二代证REQB指令的应答,估计是你的RC531配置不对
建议你购买一个阅读器,用逻辑分析仪分析一下就行了 是的
ATTRIB 是特殊的发指令。 mark. 帮顶。 有做过的吗? 已解决 可以读2代身份证的UID了
上面发的代码没问题 芯片焊接问题 mark mark 二代证不是每家都有资质做的 mark 回复【楼主位】tick
-----------------------------------------------------------------------
我也碰到和楼主一样的问题,能指教一下吗?
MF1读写卡都正常
M531PiccRequestB返回0xff 将WriteIO(RegRxThreshold, 0x44); //0x44, 可接收的最小信号强度
改为:WriteIO(RegRxThreshold, 0xFF); //0x44, 可接收的最小信号强度
试一下!!!!
请问有没有对typeB的CPU卡操作成功的! 我获取了UID呀,但是怎么是动态的呢?同一张身份证,不断的刷,得到的是不同的序列号呀?
请问各位大虾,你们是怎么解决的呀?
是不是有一个什么公式还是我发送的命令不对呀!
我是先发“0x05 0x00 0x00”,得到"5000000000D1038605008080"
询卡成功后,读卡模块发送SELECT命令“0x1D 0x00 0x00 0x00 0x00 0x00 0x08 0x01 0x08”
最后读卡模块发送GUID命令“0x00 0x36 0x00 0x00 0x08”
请问,问题出在那里呀 632能读二代身份证么?问下楼主??
为毛很多模块都说读不了呢,真的是因为没有资质吗?
好像是可以读出身份证号的吧,照片什么的没有加密模块是读不出来的。。
各种解释都有。 TYPE B 支持就可以
像MFRC500只支持TYPE A当然不行
MFRC531支持TYPE B就可以,读出来的只是二代身份证唯一的8字节 UID号。
该方案我只应用到 一家企业在用要求全部员工用2代身份证门禁考勤。
他们不计成本,就开发出来呗。
另外:这公司大概400多员工,其中大约《=10张是读不了的。据说二代有些卡连UID都读不出的,这个试下来确实是这样的 回复【20楼】tick
-----------------------------------------------------------------------
我读出来的UID号码是在不断变化的,不过就只是在几个数据之间变化。
作为产品,我们需要的是唯一的一个序列号,如果是不断变化的号码,那就只能用于实验室。如果读不出来那问题将更加的严重,
请问大虾,我得到的UID号是不是要需要一个特殊的公式才可以转换为唯一的号呢!
谢谢 不需要,读出来就是唯一的码 回复【20楼】tick
type b 支持就可以
像mfrc500只支持type a当然不行
mfrc531支持type b就可以,读出来的只是二代身份证唯一的8字节 uid号。
该方案我只应用到 一家企业在用要求全部员工用2代身份证门禁考勤。
他们不计成本,就开发出来呗。
另外:这公司大概400多员工,其中大约《=10张是读不了的。据说二代有些卡连uid都读不出的,这个试下来确实是这样的
-----------------------------------------------------------------------
哦
是这样啊
看来632也没问题了,只要写出合理的命令,传递进模块里,很有可能能读出点什么吧(?)
我觉得我应该找个网吧读二代的机器拆了看看,全世界应该就做这个读typeb芯片应该就一两家吧?什么复旦是干嘛的。。
很久以前传言说二代身份证技术用了日本人的技术,不知道这个又是怎么回事? mark mark mark 哦,原来读出来的是UID,不是身份证号码,2者有必然关联吗?
RC522也支持TYPE B,应该也可以读到UID吧? MARK 身份证号码我觉得应该给读出的 身份证号码是加密的,读不出来。UID的话只要支持TYPE B模式就能读出来。 m1卡能读不一定 硬件没问题,typeB是10%调制的,能读typeA的天线板不一定能读typeB MARK
LEARN good 之前有同事试过说是读出来的UID是变化的。
请教一下,不用加密模块,确实可以读出UID吗? mark jh 回复【11楼】tick
-----------------------------------------------------------------------
tick在吗,你的代码能不能看下子啊,读二代证的代码,谢谢啊 兄弟们,我也是能读typeA.读不了typeB啊.还弄不明白是硬件问题还是软件问题啊.郁闷中... 回复【39楼】zjczm
-----------------------------------------------------------------------
应该是代码的问题,最近也在研究啊~~ 回复【31楼】mylovefor
-----------------------------------------------------------------------
确定吗,只改动代码可以实现的 留印,也许有用... 有意思 mark,learn 第二代身份证 是CPU卡 需要发送数据 然后校验 对了 才返回正确信息。 二代证读内容肯定是没那么容易的,一般厂家做不出来,想做还得什么公安部的授权。
读UID只要是支持TYPEB的基站芯片都能读,这没什么秘密。
当然,ATRRIB是非标的。 准备改一下M1的读卡器用来读TYPE A 的UID号 我日,我是用EM4094,也是能读A卡,读不了B卡,怎么回事 tick 发表于 2010-3-25 13:51 static/image/common/back.gif
while(1)
{
// IS014443B
楼主,能上传下你的工程吗? tick 发表于 2010-9-25 09:49 static/image/common/back.gif
不需要,读出来就是唯一的码
读出来的是8个字节的数据,但是我们的身份证是18位的,那是怎么计算出来的! 我用的是523,能读的了A卡,读不了B卡,不知道是程序的原因,还是天线的原因。 qzxy0927 发表于 2013-4-15 15:26
读出来的是8个字节的数据,但是我们的身份证是18位的,那是怎么计算出来的! ...
我的理解是,身份证UID是卡片的唯一标示,身份证号作为个人信息录入卡片上,可能通过有关部门定义的加密命令获取。UID和身份证号应该是关联起来的。
页:
[1]