M1卡介绍
- 容量为8K位EEPROM(Electrically Erasable Programmable Read-Only Memory,带电可擦可编程只读存储器)
- 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位
- 每个扇区有独立的一组密码及访问控制
- 每张卡有唯一序列号,为32位
- 具有防冲突机制,支持多卡操作
- 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
- 数据保存期为10年,可改写10万次,读无限次
- 工作温度:-20℃~50℃(温度为90%)
- 工作频率:13.56MHZ
- 通信速率:106KBPS
- 读写距离:10mm以内(与读写器有关)
1、M1卡分为16个扇区,每个扇区4块(块0~3),共64块,按块号编址为0~63。第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。其他各扇区的块0、块1、块2为数据块,用于存贮数据;块3为控制块,存放密码A、存取控制、密码B。每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存贮结构如下表所示:
|
块0
|
IC卡厂家信息
|
数据块
|
|
扇区0
|
块1
|
|
数据块
|
|
|
块2
|
|
数据块
|
|
|
块3
|
密码A 存取控制 密码B
|
控制块
|
|
块0
|
|
数据块
|
||
扇区1
|
块1
|
|
数据块
|
|
|
块2
|
|
数据块
|
|
|
块3
|
密码A 存取控制 密码B
|
控制块
|
|
|
|
∶
∶
∶
|
|
|
0
|
|
数据块
|
||
扇区15
|
1
|
|
数据块
|
|
|
2
|
|
数据块
|
|
|
3
|
密码A 存取控制 密码B
|
控制块
|
3、每个扇区的块0、块1、块2为数据块,可用于存贮数据。
数据块可作两种应用:
用作一般的数据保存,可以进行读、写操作。
用作数据值,可以进行初始化值、加值、减值、读值操作。
4、每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:
各区控制块3 结构 | 字节号 | 0 1 2 3 4 5 | 6 7 8 9 | 10 11 12 13 14 15 |
控制值 | FF FF FF FF FF FF | FF 07 80 69 | FF FF FF FF FF FF | |
说明 | 密码A(0~5字节) | 存取控制(6~9字节) | 密码B(10~15字节) |
密码A(6字节) 存取控制(4字节) 密码B(6字节)
5、每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
表:控制位定义"CXxy" (x=0~15扇区; y=块0,块1,块2)
块0 | C1x0 | C2x0 | C3x0 | 用户数据块,(0区0块除外) |
块1 | C1x1 | C2x1 | C3x1 | 用户数据块 |
块2 | C1x2 | C2x2 | C3x2 | 用户数据块 |
块3 | C1x3 | C2x3 | C3x3 | 密匙存取控制块 |
例如C1x0中的C代码这是控制位,1代表第一位,0代表是块0的控制位。
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节中的位置
表:三个控制位在存取控制字节中的位置(注:" _b" 表示取反)
字节号 | 位号 | bit 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节6 | C2x3_b | C2x2_b | C2x1_b | C2x0_b | C1x3_b | C1x2_b | C1x1_b | C1x0_b |
字节7 | C1x3 | C1x2 | C1x1 | C1x0 | C3x3_b | C3x2_b | C3x1_b | C3x0_b |
字节8 | C3x3 | C3x2 | C3x1 | C3x0 | C2x3 | C2x2 | C2x1 | C2x0 |
字节9 | BX7 | BX6 | BX5 | BX4 | BX3 | BX2 | BX1 | BX0 |
所属块 | 块3控制位 | 块2控制位 | 块1控制位 | 块0控制位 | 块3控制位 | 块2控制位 | 块1控制位 | 块0控制位 |
以块0为例,对块0的控制:
bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字节6 |
C20_b |
C10_b |
||||||
字节7 |
C10 |
C30_b |
||||||
字节8 |
C30 |
C20 |
||||||
字节9 |
( 注: C10_b表示C10取反 )
存取控制(4字节,其中字节9为备用字节)结构如下所示:
bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字节6 |
C23_b |
C22_b |
C21_b |
C20_b |
C13_b |
C12_b |
C11_b |
C10_b |
字节7 |
C13 |
C12 |
C11 |
C10 |
C33_b |
C32_b |
C31_b |
C30_b |
字节8 |
C33 |
C32 |
C31 |
C30 |
C23 |
C22 |
C21 |
C20 |
字节9 |
( 注: _b表示取反 )
6、数据块(块0、块1、块2)的存取控制如下:
控制位(X=0..2) |
访 问 条 件 (对数据块 0、1、2) |
|||||
C1X |
C2X |
C3X |
Read |
Write |
Increment |
Decrement, transfer, Restore |
0 |
0 |
0 |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
KeyA|B |
Never |
Never |
Never |
1 |
0 |
0 |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
0 |
KeyA|B |
KeyB |
KeyB |
KeyA|B |
0 |
0 |
1 |
KeyA|B |
Never |
Never |
KeyA|B |
0 |
1 |
1 |
KeyB |
KeyB |
Never |
Never |
1 |
0 |
1 |
KeyB |
Never |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
Never |
Never |
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块0的存取控制位C10 C20 C30=1 0 0时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。
7、控制块(块3)的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
密码A |
存取控制 |
密码B |
||||||
C13 |
C23 |
C33 |
Read |
Write |
Read |
Write |
Read |
Write |
0 |
0 |
0 |
Never |
KeyA|B |
KeyA|B |
Never |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
KeyA|B |
Never |
1 |
0 |
0 |
Never |
KeyB |
KeyA|B |
Never |
Never |
KeyB |
1 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
0 |
0 |
1 |
Never |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
1 |
Never |
KeyB |
KeyA|B |
KeyB |
Never |
KeyB |
1 |
0 |
1 |
Never |
Never |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
例如:当块3的存取控制位C13 C23 C33=1 0 0时,表示:
密码A: 不可读,验证KEYB正确后可写(更改)。
存取控制:不可写,验证KEYA或KEYB正确后可读。
密码B: 不可读,验证KEYB正确后可写。
卡片的电气部分只由一个天线和ASIC(Application Specific Integrated Circuit)组成。
天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。
ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个8K位EEPROM(Electrically Erasable Programmable Read-Only Memory,带电可擦可编程只读存储器)组成。
工作原理:读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与讯写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
M1射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。
防冲突机制 (Anticollision Loop)
当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。
选择被选中的卡的序列号,并同时返回卡的容量代码。
选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验。)
读 (Read):读一个块;
写 (Write):写一个块;
加(Increment):对数值块进行加值;
减(Decrement):对数值块进行减值;
存储(Restore):将块中的内容存到数据寄存器中;
传输(Transfer):将数据寄存器中的内容写入块中;
中止(Halt):将卡置于暂停工作状态;
连接读写器→寻卡→识别卡(获取卡序列号)→从多卡中选一张卡→向卡中缓冲区装载密码→验证密码→进行读写→关闭连接
即(代码说明)
Open_USB→rf_request→rf_anticoll→rf_select→rf_load_key→rf_authentication→(/a_hex)→rf_read/rf_write→(hex_a)→Close_USB
如果概括来说的话,主要也就四部分:开关连接、寻卡、验证密码、读取。
基本操作规则
(1)程序开始,调用rf_init函数初始化串口。
(2)寻卡,调用rf_card;
相当于连续调用三个函数:
rf_request
rf_anticoll
rf_select
注:调用高级函数对卡进行操作时,无需此步骤。
(3)对单个扇区操作,顺次执行A~D;
对多个扇区操作,循环执行A~E;
A、选定要操作的扇区;
B、装载密码,调用rf_load_key;
C、验证密码,调用rf_authentication;
D、进行操作,包括读写及值操作。
E、调用rf_halt。
(4)关闭串口,调用rf_exit。程序正常退出或因错误退出之前,要使用函数;否则再次执行初始化串口时将出错。
1.寻卡模式:
寻卡模式分三种情况:IDLE模式、ALL模式及指定卡模式(0,1,2 均是int类型,是方法参数,下同)。
0——表示IDLE模式,一次只对一张卡操作;
1——表示ALL模式,一次可对多张卡操作;
2——表示指定卡模式,只对序列号等于snr的卡操作(高级函数才有)【不常用】
也就是说,我们一次也可以同时操作多张卡。
对于多卡操作,其实际真正执行操作的还是一张卡。读写器能识别多张卡的序列号(但注意识别出的顺序是不定的,并且最多也就能识别4张卡,因为卡叠放的厚度太厚,会超出读写器的识别范围),并一一进行操作。
所以由此看出,多卡操作的意义并不大。但我建议大家还是设置为1好了。
2.密码验证模式:
0——KEYSET0的KEYA
4——KEYSET0的KEYB
M1卡可以在验证密码时选择密码类型(A/B)。【其实M1卡有3套密码(KEYSET0、KEYSET1、KEYSET2),共6个密码(用0~2、4~6来表示这六个密码),目的是为了适应不同读写器。而这里我们用的是KEYSET0的2个密码】
这可以说是M1卡的精髓了,也是M1卡最为复杂的地方,希望大家耐心看完。
(请先看明白M1卡结构)如上所说,在存取控制中每个块都有相应的三个控制位,它们的定义如下:
块0: C10 C20 C30
块1: C11 C21 C31
块2: C12 C22 C32
块3: C13 C23 C33
一个扇区的三个数据块,我们可以利用密码机制对它们分别进行权限控制。数据块(块0、块1、块2)的存取控制如下:
例如:当块0的存取控制位C10 C20 C30=100时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。
那么M1卡修改密码的方法是rf_changeb3
参数:
icdev:通讯设备标识符
_SecNr:扇区号(0~15)
_KeyA:密码A
_B0:块0控制字,低3位(D2D1D0)对应C10、C20、C30
_B1:块1控制字,低3位(D2D1D0)对应C11、C21、C31
_B2:块2控制字,低3位(D2D1D0)对应C12、C22、C32
_B3:块3控制字,低3位(D2D1D0)对应C13、C23、C33
_Bk:保留参数,取值为0
_KeyB:密码B
返 回:成功则返回 0
由上我们看出_B0、_B1、_B2、_B3分别控制块0、块1、块2、块3。
由图我们可知_B0、_B1、_B2的可取值为 0、10、100、110、1、11、101、111。
这里大家一定要注意一点:
不能装载密码到M1卡某一扇区后再更改那扇区的密码(最好连接完读写器后直接更改密码),否则更改密码会失败而冻结扇区。如果不慎这样了,解决的办法是完成一次读写操作,再更改密码。
控制块(块3)的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
_B3的取值与_B0相同。
KeyA=A0、A1、A2、A3、A4、A5
控制块=FF、07、80、69
KeyB=B0、B1、B2、B3、B4、B5
字节 | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | 权限 | 二进制 |
Byte6 | C2X3_b | C2X2_b | C2X1_b | C2X0_b | C1X3_b | C1X2_b | C1X1_b | C1X0_b | FF | 1 1 1 1 1 1 1 1 |
Byte 7 | C1X3 | C1X2 | C1X1 | C1X0 | C3X3_b | C3X2_b | C3X1_b | C3X0_b | 07 | 0 0 0 0 0 1 1 1 |
Byte 8 | C3X3 | C3X2 | C3X1 | C3X0 | C2X3 | C2X2 | C2X1 | C2X0 | 80 | 1 0 0 0 0 0 0 0 |
Byte 9 | BX7 | BX6 | BX5 | BX4 | BX3 | BX2 | BX1 | BX0 | 69 | 0 1 1 0 1 0 0 1 |
得出存取控制位如下:
块0 | C1X0 | C2X0 | C3X0 | 0 0 0 |
块1 | C1X1 | C2X1 | C3X1 | 0 0 0 |
块2 | C1X2 | C2X2 | C3X2 | 0 0 0 |
块3 | C1X3 | C2X3 | C3X3 | 0 0 1 |
控制块=08、77、8F、00
KeyB=B0、B1、B2、B3、B4、B5
字节 | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | 权限 | 二进制 |
Byte 6 | C2X3_b | C2X2_b | C2X1_b | C2X0_b | C1X3_b | C1X2_b | C1X1_b | C1X0_b | 08 | 0 0 0 0 1 0 0 0 |
Byte 7 | C1X3 | C1X2 | C1X1 | C1X0 | C3X3_b | C3X2_b | C3X1_b | C3X0_b | 77 | 0 1 1 1 0 1 1 1 |
Byte 8 | C3X3 | C3X2 | C3X1 | C3X0 | C2X3 | C2X2 | C2X1 | C2X0 | 8F | 1 0 0 0 1 1 1 1 |
Byte 9 | BX7 | BX6 | BX5 | BX4 | BX3 | BX2 | BX1 | BX0 | 00 | 0 0 0 0 0 0 0 0 |
得出存取控制位如下:
块0 | C1X0 | C2X0 | C3X0 | 1 1 0 |
块1 | C1X1 | C2X1 | C3X1 | 1 1 0 |
块2 | C1X2 | C2X2 | C3X2 | 1 1 0 |
块3 | C1X3 | C2X3 | C3X3 | 0 1 1 |
快速识别EM卡,HID卡和MF卡
MF1卡常见问题及处理建议:
- ① 盲目操作:造成某些区块误操作被锁死不能再使用。应当仔细参考表3表5的控制权限后,予先得出操作后的结果是否适合使用要求,并且列出操作顺序表单再操作。最好授权程序员对块3的设置作专人操作。
- ② 丢失密码:再读写时造成密码认证出错而不能访问卡。特别要求在对MF卡进行块3编程操作时,必须及时记录相关卡号的控制值,KeyA,KeyB等,而且应当有专人管理密码档案。
- ③ 错误设置:对MF1卡的块3控制块了解不透彻,错误的理解造成设置造成错误的设置。依照表2可知,目前Mf1卡的控制块仅只有8种数据块访问控制权限和8种控制块设置权限,超出这16种权限的其他代码组合,将直接引起错误设置而使卡片报废!
- ④ 极端权限:当块3的存取控制位C13 C23 C33 = 110或者111时,称为极端权限。除特殊应用外一般不被使用!启用前认真权衡对密码读写,存取控制的锁死是否必要,否则,数据加密后即使有密码也无法读取被锁死的数据区块(看不见)!
- ⑤ 设备低劣:低劣的设备将直接影响卡的读写性能。对MF卡进行块3编程操作的设备,特别要求其性能必须十分可靠,运行十分稳定!建议选用由飞利浦公司原装读写模块构建的知名读写机具!
- ⑥ 编程干扰:在对块3进行编程操作时,不可以有任何的‘IO‘中断或打扰!包括同时运行两个以上程序干扰甚至PC机不良的开关电源纹波干扰等,否则,不成功的写操作将造成某个扇区被锁死的现象,致使该扇区再次访问时出错而报废。
- ⑦ 数据出错:在临界距离点上读卡和写卡造成的。通常的读卡,特别是写卡,应该避免在临界状态(刚能读卡的距离)读卡。因为临界状态下的数据传送是很不稳定的!容易引起读写出错!
- ⑧ 人为失误:例如,密码加载操作失误,误将KeyA加载为KeyB;或者是误将其他制卡厂约定的初始密码值如a0a1a2a3a4a5,b0b1b2b3b4b5加载到本公司生产的MF1卡内;或者在初始状态下(密码A=000000000000【隐藏状态,实际为ffffffffffff】,控制位=FF 07 80 69,密码B=ffffffffffff【可见】)若不经意地将KeyA=000000000000 删除后又重新输入12个‘0‘,并加载了它!这时无意中已将KeyA原来12个隐藏的‘f‘,修改成了12个‘0‘,其后果可想而知!
- ⑨ 卡片失效:读写均无数据传送,读写器报告‘寻卡错误‘!卡片被超标扭曲,弯曲而造成内电路断裂。
- ⑩ 读写距离过近:与用户使用的读写器性能有关。标准型MF1卡的读写距离可达10cm(在飞利浦公司的标准读写机具上测试的最大距离),国产知名品牌读写器一般可达5-10cm。尺寸较小的匙扣卡,其读写距离当然比标准卡近许多,但只要可靠的读写距离≥5~10mm以上,一般不会影响正常使用!
M1卡介绍的更多相关文章
- 使用ACR122U NFC读卡器对M1卡进行读写操作(可以读写中文)
因为项目需要,第一次接触到了ACR122U NFC读卡器(非接触式)和M1卡,首先介绍一下想要读写应该知道的基本知识. 我就根据我的理解先叙述一下: ACR122U 是一款连机非接触式智能卡读写器,可 ...
- 用树莓派3B+和 ITEAD PN532 读取、破解、写入M1卡
这是一篇介绍如何用树莓派使用PN532的随笔,介绍了具体的使用步骤. 首先介绍一下: ①.IC卡是非接触式的智能卡,里面一般是一个方形线圈和一个小芯片(用强光照着可以看到).M1卡是IC卡的一种,一般 ...
- RFID-RC522、FM1702SL、M1卡初探
catalogue . 引言 . RC522芯片(读卡器)简介 . FM1702SL芯片(读卡器)简介 . RFID M1卡简介 . 读取ID/序列号(arduino uno.MFRC522芯片 Ba ...
- CPU卡与M1卡的区别
简单来讲CPU卡比M1卡更加安全.扩展性更好.支持更多应用 CPU卡 M1 操作系统 带有COS系统 无COS系统 硬件加密模块 硬件DES运算模块 无实现算法的硬件加密模块 算法支持 标准DES ...
- 射频识别技术漫谈(15)——Mifare1的安全性及7字节序列号M1卡【worlsing笔记】
Mifare1的安全性主要指卡中数据的安全性,要求卡中的数据不能被非法修改或窃听.数据的安全性主要使用加密技术来保证,加密技术有两个关键因素:加密算法和密钥.现代加密技术的一大特点是加密算法公开,如果 ...
- IC卡、M1卡、CPU卡、SAM卡、PSAM卡的联系与区别
一. 技术方面(非接触式IC卡) 1. 逻辑加密卡又叫存储卡,卡内的集成电路具有加密逻辑和EEPROM(电可擦除可编程只读存储器). 2. CPU卡又叫智能卡,卡内的集成电路包括中央处理器(CPU ...
- 射频识别技术漫谈(15)——Mifare1的安全性及7字节序列号M1卡
Mifare1的安全性主要指卡中数据的安全性,要求卡中的数据不能被非法修改或窃听.数据的安全性主要使用加密技术来保证,加密技术有两个关键因素:加密算法和密钥.现代加密技术的一大特点是加密算法公开,如果 ...
- IC卡,ID卡,M1卡,射频卡
一般把可读可写,频率是13.56MHz的射频卡称为IC卡,IC卡可以写入数据, 只能读,频率是125KHz的射频卡称为ID卡, M1卡是NXP公司的S50卡的一种叫法,国内的复旦F08,达华的TKS5 ...
- M1卡区块控制位详解
M1卡区块控制位详解 Mifare 1S50/Mifare 1S70 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制.存取控制为4个字节,共32位,扇区中的每个块(包括 ...
随机推荐
- Maven:解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk, 添加 -Dmaven.multiModuleP ...
- [daily][archlinux][fonts] 在linux下管理字体
序: linux是社区搞出来, 商业应用也都是服务器场景.社区里又都是技术人员.字体又是细节.而且会英文早成了标配.所以没有很多社区以外的人力来搞字体这个毫无回报的东西. 结果很自然的,装linux桌 ...
- 学习mysql
一 概述 1.什么是数据库 数据库就是数据的仓库. mysql是对数据库进行存储和指令操作的软件.这类软件成为数据管理系统Database Management System. 2.mysql的安装和 ...
- 利用insert,update和delete注入获取数据
0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于i ...
- Web性能API——帮你分析Web前端性能
前端性能统计必备api,有不知道的吗? 正文从这开始- 开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户 ...
- 【转】PHP 位运算应用口诀
位运算应用口诀 清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. 2 "<<" ...
- Struts2(五):ActionSupport
我们在上一章节中的一个列子中使用到了一个标识跳转到登录页面的例子: 示例是这样写的: index.jsp: <br/> <a href="gotoLoginPage&quo ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 总结
前言 写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理 ...
- Java语言的特点
一. 面向对象:其实是现实世界模型的自然延伸.现实世界中任何实体都可以看作是对象.对象之间通过消息相互作用.另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例.如果说传统的过程式 ...
- [2]R语言在数据处理上的禀赋之——可视化技术
本文目录 Java的可视化技术 R的可视化技术 二维做图利器plot的参数配置 *权限机制 *plot独有的参数 *plot的type介绍 *title介绍 *公共参数集合--par *par的权限机 ...