- 動態庫簡介
動態庫OUR_MIFARE.dll用VC開發,編譯成32位Release實體或64位Release實體,適用於WIN2000、XP、2003、win7的32或64位、win8編譯和運行環境。本文檔下面的源代碼例子是C++的調用格式。
本動態庫是本公司USB接口IC卡讀寫器的配套文件,必須和讀寫器一起使用。
OUR_MIFARE.dll支持在軟件運行中可以隨時更換USB接口。本公司免驅型和有驅型讀寫器使用的OUR_MIFARE.dll不同,但函數的調用一樣,如果客戶程序開發好了,免驅型和有驅型互換時,只需更換對應的OUR_MIFARE.dll。
推薦使用動態調用的方法使用本動態庫。
本讀寫器支持的IC卡內部存儲結構知識:
1、ISO14443 TYPE A標準的Mifare One系列卡(含S50卡),容量爲1K字節。Mifare One卡的內部存儲結構分爲16個扇區,從第0區到第15區,每個扇區有獨立的密碼和權限控制字,可作爲獨立的電子錢包,每個扇區有4個塊,序號爲第0塊、第1塊、第2塊、第3塊,每塊16個字節,第3塊是卡的密碼和權限控制字專用塊,禁止在此存放數據。第0塊、第1塊、第2塊可隨意存放數據。但第0區的第0塊已被固化了IC卡出廠信息,此塊只能讀出信息,不可更改。
每張卡都有一個全球統一的4個字節的序列號。許多公司銷售的讀卡器只有讀取卡序列號的功能,也能用於一般的考勤系統。但這類讀卡器跟本公司的讀寫器有着本質的不同,本公司的讀寫器不僅能讀序列號,而且還有服務於IC卡所有用途的功能,比如選中卡、認證、讀卡、寫卡、改密碼、休眠卡能功能。
2、ISO14443 TYPE A標準的S70卡,容量爲4K字節。共40個扇區,也就是40個獨立電子錢包,其中0~31扇區爲普通區,區定義與以上的S50卡相同。32~39區爲大數據區,每區有16個塊,第15塊是卡的密碼和權限控制字專用塊,第0~14塊爲數據塊,每塊16個字節,共有224個字節可用。
二、易用函數
大部份軟件、一卡通公司,只要使用以下二個函數完全可以達到軟件需求,比如讀出信息、讀出金額、扣費等等。
輕鬆讀卡:函數名:piccreadex
功能 |
超強讀卡,使用此函數可以一次性讀整個區的第0塊、第1塊、第2塊共3塊的信息,並且返回卡序列號。 |
|
原始聲明 |
unsigned char __stdcall piccreadex(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2) |
|
輸入 |
1、ctrlword讀卡的控制字,ctrlword是一個字節,相當於八個位,每個位只有0和1兩種狀態: 推薦使用方法如下: //先定義以下常量 #define BLOCK0_EN 0x01 #define BLOCK1_EN 0x02 #define BLOCK2_EN 0x04 #define NEEDSERIAL 0x08 #define EXTERNKEY 0x10 舉例: //以下控制字含義:讀塊0、塊1、塊2,僅讀指定序列號的卡,需要每次指定密碼 Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY //以下控制字含義:讀塊0、塊2,可讀任意卡,需要每次指定密碼 Ctrlword = BLOCK0_EN + BLOCK2_EN + EXTERNKEY //以下控制字含義:讀塊0、塊2,可讀任意卡,啓用芯片內部密碼 Ctrlword = BLOCK0_EN + BLOCK2_EN
2、serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則Serial數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲數組的內容賦值。 3、area是需要讀出的區號,則0-15中的某個數。 4、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。
5、*picckey 指向存放卡密碼的數組(6個char的密碼數組)。
6、*piccdata0_2是指向下標個數大於48的字節數組,用於存放3個塊的數據,其中下標0~15存放作爲讀出的塊0的數據,下標16~31存放作爲讀出的塊1的數據,下標32~47存放作爲讀出的塊2的數據, |
|
返回 |
返回unsigned char值,並將卡本塊的數據傳值到*piccdata指向的數組中。 |
|
返 回 值 說 明 |
0 |
操作成功,讀出的數據有效。 |
1 |
0~2塊都沒讀出來,可能刷卡太塊。但卡序列號已被讀出來。 |
|
2 |
第0塊已被讀出,但1~2塊讀取失敗。卡序列號已被讀出來。 |
|
3 |
第0、1塊已被讀出,但2塊讀取失敗。卡序列號已被讀出來。 |
|
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
輕鬆寫卡:函數名:Piccwriteex
功能 |
超強寫卡,使用此函數可以一次性寫整個區的第0塊、第1塊、第2塊信息。 |
|
原始聲明 |
unsigned char __stdcall piccwriteex(unsigned char ctrlword,unsigned char *serial,unsigned char area, unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2) |
|
輸入 |
1、ctrlword讀卡的控制字,ctrlword是一個字節,相當於八個位,每個位只有0和1兩種狀態: 推薦使用方法如下: //先定義以下常量 #define BLOCK0_EN 0x01 #define BLOCK1_EN 0x02 #define BLOCK2_EN 0x04 #define NEEDSERIAL 0x08 #define EXTERNKEY 0x10 #define NEEDHALT 0x20 舉例: //以下控制字含義:讀塊0、塊1、塊2,僅寫指定序列號的卡,需要每次指定密碼,寫成功後休眠卡 Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY + NEEDHALT //以下控制字含義:寫塊0、塊2,可寫任意卡,需要每次指定密碼, 寫成功後休眠卡 Ctrlword = BLOCK0_EN + BLOCK2_EN + EXTERNKEY + NEEDHALT //以下控制字含義:寫塊0、塊2,可寫任意卡,啓用芯片內部密碼,寫成功後休眠卡 Ctrlword = BLOCK0_EN + BLOCK2_EN + NEEDHALT
2、serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則Serial數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲該數組的內容賦值。
3、area是需要準備寫的區號,則0-15中的某個數。
4、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。
5、*picckey 指向存放卡密碼的數組(6個char的密碼數組)。
6、*piccdata0_2是指向下標個數大於48的字節數組,用於存放3個塊的數據,其中下標0~15存放作爲準備寫的塊0的數據,下標16~31存放作爲準備寫的塊1的數據,下標32~47存放作爲準備寫的塊2的數據, |
|
返回 |
返回unsigned char值,並將卡本塊的數據傳值到*piccdata指向的數組中。 |
|
返 回 值 說 明 |
0 |
操作成功,寫卡數據有效。 |
1 |
0~2塊都沒寫進去,可能刷卡太塊。 |
|
2 |
第0塊已寫進去,但1~2塊寫失敗。 |
|
3 |
第0、1塊已被寫進去,但2塊讀寫失敗。 |
|
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
以上函數是在已知卡密碼的情況下操作。如果需要更改卡密碼可通過piccchangesinglekey函數,快速地更改卡密碼,piccchangesinglekey詳細介紹請查看下面第12頁。
讓讀寫器發出聲音 函數名:pcdbeep
功能 |
讓讀寫器發出聲響。 |
|
原始聲明 |
unsigned char __stdcall pcdbeep(unsigned long xms) |
|
輸入 |
xms爲響聲的時間長度,單位爲2毫秒 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,。 |
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
- 可作爲軟件加密狗,輕鬆實現自己軟件的產權保護。
函數名:pcdgetdevicenumber
功能 |
返回本讀寫器獨一無二的設備編號,此編號固化在芯片中,並通過加密的方式傳輸。根據此編號可在本公司網站查詢是否真正爲本公司的質保產品。因爲可以返回全球唯一的設備編號,所以只需增加少量的算法,本讀寫器也可作軟件加密狗用。 |
|
原始聲明 |
unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber) |
|
輸入 |
devicenumber只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。因爲此數組僅用於返回設備編號。 |
|
返回 |
返回unsigned char值,並將尋到的卡的序列號傳值到*serial數組。 |
|
返 回 值 說 明 |
0 |
操作成功,* devicenumber數組中的數據有效。 |
12 |
讀取設備編號失敗。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
功能
- 其他函數大全
函數名:piccrequest
功能 |
尋卡並返回該卡的序列號 |
|
原始聲明 |
unsigned char __stdcall piccrequest(unsigned char *serial) |
|
輸入 |
形參*serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。Serial數組的內容無需賦值,因爲此數組僅用於返回值。 |
|
返回 |
返回unsigned char值,並將尋到的卡的序列號傳值到*serial數組。 |
|
返 回 值 說 明 |
0 |
操作成功,*serial數組中的數據有效。 |
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
/*******************{{piccrequest函數使用特例*********************************/ //卡序列號緩衝 unsigned char myserial[4]; unsigned char status; //函數指針聲明 unsigned char (__stdcall *piccrequest)(unsigned char *serial); //提示當前目錄 AnsiString FileName=ExtractFilePath(Application->ExeName); //如果中沒有"\"字符,就加進去 if(FileName.SubString(FileName.Length(),1) != "\\") { FileName += "\\"; }
//調用讀卡函數,如果沒有尋到卡返回1,拿卡太快返回2,沒註冊髮卡機返回4,沒有驅動程序返回3 FileName += "OUR_MIFARE.dll"; if(!FileExists(FileName)) {//如果文件不存在 ShowMessageb("無法在應用程序的文件夾找到IC卡讀寫卡器動態庫"); return; //返回 } HINSTANCE hDll; //加載動態庫 hDll=LoadLibrary(FileName.c_str()); //提取動態庫 piccrequest = (unsigned char (__stdcall *piccrequest)(unsigned char *serial))GetProcAddress(hDll,"piccread"); //調用函數 status = piccrequest(myserial); //返回值處理 switch(status) { case 0: //TO-DO相應的處理,請在以下加入代碼 break; case 1: break; //... } |
注:原始聲明指動態庫的VC源碼內的聲明。
函數名:piccrequestex
功能 |
尋卡並選中指定序列號的IC卡,必須指定序列號 |
|
原始聲明 |
unsigned char __stdcall piccrequestex (unsigned char *serial) |
|
輸入 |
形參*serial只需指向一個至少已分配了4個char空間的數組 unsigned char *指針, serial的下標由0開始, serial數組的值爲需要尋卡選卡的卡序列號。 |
|
返回 |
返回unsigned char值,並將尋到的卡的序列號傳值到*serial數組。 |
|
返 回 值 說 明 |
0 |
操作成功,*serial數組中的數據有效。 |
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
/*******************{{piccrequestex函數使用特例*********************************/ //卡序列號緩衝 unsigned char myserial[4]; unsigned char status; //函數指針聲明 unsigned char (__stdcall *piccrequestex)(unsigned char *serial); //提示當前目錄 AnsiString FileName=ExtractFilePath(Application->ExeName); //如果中沒有"\"字符,就加進去 if(FileName.SubString(FileName.Length(),1) != "\\") { FileName += "\\"; }
//調用讀卡函數,如果沒有尋到卡返回1,拿卡太快返回2,沒註冊髮卡機返回4,沒有驅動程序返回3 FileName += "OUR_MIFARE.dll"; if(!FileExists(FileName)) {//如果文件不存在 ShowMessageb("無法在應用程序的文件夾找到IC卡讀寫卡器動態庫"); return; //返回 } HINSTANCE hDll; //加載動態庫 hDll=LoadLibrary(FileName.c_str()); //提取動態庫 piccrequestex = (unsigned char (__stdcall *piccrequestex)(unsigned char *serial))GetProcAddress(hDll," piccrequeste"); //調用函數 Myserial[0] = 0x18; Myserial[1] = 0x18; Myserial[2] = 0x18; Myserial[3] = 0x18; //調用函數 status = piccrequestex (myserial); //返回值處理 switch(status) { case 0: //TO-DO相應的處理,請在以下加入代碼 break; case 1: break; //... } |
函數名:piccauthkey1
功能 |
密碼認證方式1,用外部密碼認證,必須指定外部密碼。本函數必須在piccrequest或piccrequestex函數執行之後運行,並且要緊接着調用,中途不能調用其他函數。 |
|
原始聲明 |
unsigned char __stdcall piccauthkey1(unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey) |
|
輸入 |
1、*serial指向存放選中卡序列號的數組,此序列號必須是選中卡的。 2、area是需要認證的區號,0-15中的某個數。 3、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。 4、*picckey 指向存放卡密碼的數組(6個char的密碼數組)。 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,該卡的密碼已認證通過,可以進運讀寫操作了。 |
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:piccauthkey2
功能 |
密碼認證方式2,用芯片內部密碼認證,該密碼存放在芯片的只寫區域(用pcdwritekeytoe2寫密碼),認證時通過芯片內部納米線路傳輸,保密性極強,能小心剖開芯片,再用連上納米線路攔截恐怕只有請外星人出馬了。本函數必須在piccrequest或piccrequestex函數執行之後運行,並且要緊接着調用,中途不能調用其他函數。 |
|
原始聲明 |
unsigned char __stdcall piccauthkey2(unsigned char *serial,unsigned char area,unsigned char keyA1B0) |
|
輸入 |
1、*serial指向存放選中卡序列號的數組(4個char),此序列號必須是選中卡的。 2、area是需要認證的區號,0-15中的某個數。 3、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。 |
|
返回 |
返回unsigned char值。 |
|
|
0 |
操作成功,該卡的密碼已認證通過,可以進運讀寫操作了。 |
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:pcdwritekeytoe2
功能 |
將密碼寫入芯片內部保密性極高的只寫區域,此函數寫入密碼僅僅是爲了piccauthkey2函數的使用。 |
|
原始聲明 |
unsigned char __stdcall pcdwritekeytoe2(unsigned char area,unsigned char keyA1B0,unsigned char *picckey)
|
|
輸入 |
1、area是需要認正的區號,0-15中的某個數。 2、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。 3、*picckey 指向存放卡密碼的數組(6個char的密碼數組)。 |
|
返回 |
返回unsigned char值。 |
|
|
0 |
寫密碼成功 |
15 |
寫密碼錯誤 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:piccread
功能 |
讀出一塊的數據,也就是16個字節。必須在執行piccrequest或 Piccrequestex函數,接着執行piccauthkey1或 piccauthkey2函數,然後執行piccread才能成功讀出一塊的數據。 |
|
原始聲明 |
unsigned char __stdcall piccread(unsigned char block,unsigned char *piccdata) |
|
輸入 |
1、block是IC卡的絕對塊號,當需要讀IC卡的第x區的第y塊時,絕對塊號必須是block = x * 4 + y。 2、*piccdata是指向下標個數大於16的數組,作爲返回16個字節的卡數據的緩存。 |
|
返回 |
返回unsigned char值,並將卡本塊的數據傳值到*piccdata指向的數組中。 |
|
返 回 值 說 明 |
0 |
操作成功,讀出的數據有效。 |
13 |
讀本塊失敗,原因是本塊所對應的區還沒通過密碼認證。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:piccwrite
功能 |
讀出一塊的數據,也就是16個字節。必須在執行piccrequest或 Piccrequestex函數,接着執行piccauthkey1或 piccauthkey2函數,然後執行piccwrite才能成功寫進一塊的數據。 |
|
原始聲明 |
unsigned char __stdcall piccwrite(unsigned char block,unsigned char *piccdata) |
|
輸入 |
1、block是IC卡的絕對塊號,當需要讀IC卡的第x區的第y塊時,絕對塊號必須是block = x * 4 + y。 2、*piccdata是指向下標個數大於16的數組,特別提醒在調用piccwrite之前,必須對piccdata數組明確賦值,千萬不能寫進不明數據,特別對是存放卡權限的第3塊,更要明確寫入,否則極有可能導致卡作廢。 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,寫進數據有效。 |
14 |
寫本塊失敗,原因是本塊所對應的區還沒通過密碼認證。。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:picchalt
功能 |
休眠選中卡,卡一旦被休眠,將不能再次被選中、不能被讀被寫。必須得拿卡離開感應區,再次放卡才能再次選中和讀寫卡。休眠卡功能一般用在只能操作一次的情況下,比如刷一次卡只扣一次錢的情況。 |
|
原始聲明 |
unsigned char __stdcall picchalt() |
|
輸入 |
不用輸入 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,。 |
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
|
函數名:piccchangesinglekey
功能 |
改單區密碼。 |
|
原始聲明 |
unsigned char __stdcall piccchangesinglekey(unsigned char ctrlword,unsigned char *serial,unsigned char area , unsigned char keyA1B0,unsigned char *piccoldkey,unsigned char *piccnewkey) |
|
輸入 |
1、ctrlword讀卡的控制字,ctrlword是一個字節,相當於八個位,每個位只有0和1兩種狀態: 推薦使用方法如下: //先定義以下常量 #define NEEDSERIAL 0x08 舉例: //以下控制字含義:僅更改指定序列號的卡密碼 Ctrlword = NEEDSERIAL //以下控制字含義:更改任意卡密碼 Ctrlword = 0
2、serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則Serial數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲該數組的內容賦值。
3、area是需要準備寫的區號,則0-15中的某個數。
4、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。
5、* piccoldkey指向存放卡原始密碼的數組(6個char的密碼數組)。
6、* piccnewkey指向存放卡新密碼(也就是準備改成的密碼)的數組(6個char的密碼數組)。 |
|
返回 |
返回unsigned char值,並將卡本塊的數據傳值到*piccdata指向的數組中。 |
|
返 回 值 說 明 |
0 |
操作成功,寫卡數據有效。 |
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗 |
|
13 |
刷卡太快 |
|
14 |
刷卡太快 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
修改卡片扇區密碼
函數名:piccchangesinglekeyex
功能 |
改單區密碼,可同時修改A密碼,或密碼權限訪問字(密碼權限編碼)或B密碼。 |
|
原始聲明 |
unsigned char __stdcall piccchangesinglekeyex(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *piccoldkey,unsigned char *piccdata) |
|
輸入 |
1、ctrlword讀卡的控制字,ctrlword是一個字節,相當於八個位,每個位只有0和1兩種狀態: 推薦使用方法如下: //先定義以下常量 #define NEEDSERIAL 0x08 舉例: //以下控制字含義:僅更改指定序列號的卡密碼 Ctrlword = NEEDSERIAL //以下控制字含義:更改任意卡密碼 Ctrlword = 0
2、serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則Serial數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲該數組的內容賦值。
3、area是需要準備寫的區號,則0-15中的某個數。
4、keyA1B0爲0時以B密碼來認證,爲非0時以A密碼來認證。剛出廠的卡以A密碼來認證。
5、* piccoldkey指向存放卡原始密碼的數組(6個char的密碼數組)。
6、* piccdata指向存放卡新A密碼(也就是準備改成的密碼)、密碼權限訪問字、新B密碼的數組、指定更改項目的標誌(17個char的數組)。其中新A密碼6個字節;密碼權限訪問字4個字節;新B密碼6個字節;指定更改項目的標誌爲1個字節,這個字節爲3是表示同時更改A、B、 密碼權限訪問字,爲2表示密碼權限訪問字不更改,只改A、B密碼,爲0表示只改A密碼 |
|
返回 |
返回unsigned char值,並將卡本塊的數據傳值到*piccdata指向的數組中。 |
|
返 回 值 說 明 |
0 |
操作成功,寫卡數據有效。 |
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
11 |
密碼裝載失敗。 |
|
12 |
密碼認證失敗 |
|
13 |
刷卡太快 |
|
14 |
刷卡太快 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
30 |
密碼權限訪問字(密碼權限編碼)校驗錯誤,不允許更改,以免造成卡永久損壞。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |