IC卡讀寫器開發說明

  • 動態庫簡介

動態庫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

密碼權限訪問字(密碼權限編碼)校驗錯誤,不允許更改,以免造成卡永久損壞。

其他

未知錯誤

例子及註釋

請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章