版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-.zC*程序開發(fā)*例_IC卡讀寫C*程序開發(fā)*例寶典13.3IC卡應(yīng)用
/2007-9-716:37:00
圖書導(dǎo)讀當(dāng)前章節(jié):13.3IC卡應(yīng)用·1.14其他技術(shù)·13.1串口控制·13.2加密狗·13.4監(jiān)控·13.5語音卡控制·13.6手機(jī)程序開發(fā)加拿大·達(dá)內(nèi)專注高端it培訓(xùn)名企定向委培
為納斯達(dá)克上市公司定向委培高級軟件工程師國內(nèi)最強(qiáng)大專家團(tuán)隊(duì)組合授課,確保高薪就業(yè)
.tarena..
管理不可能管理的工程!
要減少失敗的風(fēng)險(xiǎn)組織必須轉(zhuǎn)向IT開發(fā)的治理模型
如何開發(fā)智能客戶端應(yīng)用
離線應(yīng)用模塊的合理利用
.intel./cd/ids...13.3
IC卡應(yīng)用
IC〔IntegratedCircuit〕卡,也被稱作智能卡〔SmartCard〕,具有寫入數(shù)據(jù)和存儲數(shù)據(jù)的功能,IC卡內(nèi)存儲器的內(nèi)容可以根據(jù)需要有條件地供外部讀取,完成信息處理和判定。由于其內(nèi)部具有集成電路,不但可以存儲大量信息,具有極強(qiáng)的**性能,并且還具有抗干擾、無磨損、壽命長等特性。因此在各個(gè)領(lǐng)域中得到廣泛應(yīng)用。下面通過兩個(gè)實(shí)例介紹IC卡的簡單應(yīng)用。實(shí)例422向IC卡中寫入數(shù)據(jù)實(shí)例說明
IC卡是攜帶應(yīng)用信息和數(shù)據(jù)的媒體,空白IC卡是不能立即使用的,必須對IC卡應(yīng)用系統(tǒng)進(jìn)展初始化,寫入系統(tǒng)IC卡和個(gè)人密碼,個(gè)人專用信息和應(yīng)用數(shù)據(jù)。下面介紹如何向IC卡中寫入數(shù)據(jù)。運(yùn)行本例,在“數(shù)據(jù)〞文本框中輸入要存入IC卡中的數(shù)據(jù),單擊“寫數(shù)據(jù)〞按鈕,即可將輸入的數(shù)據(jù)寫入IC卡中。如圖13.6所示。技術(shù)要點(diǎn)
本例使用的是**明華生產(chǎn)的明華IC卡讀寫器,用戶在使用時(shí)將驅(qū)動(dòng)程序安裝完畢后,即可正常使用本系統(tǒng)。本例通過調(diào)用Mwic_32.dll庫,進(jìn)展IC卡的讀寫工作。下面介紹與IC卡寫操作相關(guān)的幾個(gè)函數(shù)?!?〕auto_init函數(shù)該函數(shù)用于初始化IC卡讀卡器。語法如下:publicstatice*ternintauto_init(intport,intbaud);參數(shù)說明如下。l
port:標(biāo)識端口號,1對應(yīng)的端口號為0;2對應(yīng)的端口號為1,依此類推。l
baud:標(biāo)識波特率。l
返回值:如果初始化成功,返回值是IC卡設(shè)備句柄;如果初始化失敗,返回值小于零?!?〕setsc_md函數(shù)該函數(shù)用于設(shè)置設(shè)備密碼模式。語法如下:publicstatice*ternintsetsc_md(inticdev,intmode);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
mode:標(biāo)識設(shè)備密碼模式,如果為0,設(shè)備密碼有效,設(shè)備在加電時(shí)必須驗(yàn)證設(shè)備密碼才能對設(shè)備進(jìn)展操作。如果為1,設(shè)備密碼無效。l
返回值:如果函數(shù)執(zhí)行成功返回值為零,否則小于零。〔3〕get_status函數(shù)該函數(shù)用于獲取設(shè)備的當(dāng)前狀態(tài)。語法如下:publicstatice*ternInt16get_status(inticdev,Int16*state);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
state:用于接收函數(shù)返回的結(jié)果。如果為0表示讀卡器中無卡,為1表示讀卡器中有卡。l
返回值:如果函數(shù)執(zhí)行成功返回值為零,否則小于零?!?〕csc_4442函數(shù)該函數(shù)用于核對IC卡密碼。語法如下:publicstatice*ternInt16Csc_4442(inticdev,intlen,[MarshalAs(UnmanagedType.LPArray)]byte[]p_string);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
len:標(biāo)識密碼長度,其值為3。l
p_string:標(biāo)識設(shè)置的密碼。l
返回值:如果函數(shù)執(zhí)行成功返回值為零,否則小于零?!?〕swr_4442函數(shù)該函數(shù)用于向IC卡中寫入數(shù)據(jù)。語法如下:publicstatice*ternintswr_4442(inticdev,intoffset,intlen,char*w_string);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
offset:標(biāo)識地址的偏移量,*圍是0~255。l
len:標(biāo)識字符串長度。l
w_string:標(biāo)識寫入的數(shù)據(jù)?!?〕ic_e*it函數(shù)該函數(shù)用于關(guān)閉設(shè)備端口。語法如下:publicstatice*ternintic_e*it(inticdev);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值?!?〕dv_beep函數(shù)該函數(shù)使讀卡器嗡鳴。語法如下:publicstatice*ternintdv_beep(inticdev,inttime);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
time:標(biāo)識嗡鳴持續(xù)的時(shí)間,單位是10毫秒。實(shí)現(xiàn)過程
〔1〕新建一個(gè)工程,命名為E*13_05,默認(rèn)窗體為Form1?!?〕在Form1窗體中,主要添加兩個(gè)Button控件,用于執(zhí)行向卡中寫入數(shù)據(jù)和退出程序的操作,添加一個(gè)Te*tBo*控件,將Te*tBo*中數(shù)據(jù)寫入IC卡中?!?〕主要程序代碼。將程序所使用的操作IC卡的函數(shù),封裝在類IC中。代碼如下:[StructLayout(LayoutKind.Sequential)]publicunsafeclassIC{
//對設(shè)備進(jìn)展初始化
[DllImport("Mwic_32.dll",EntryPoint="auto_init",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternintauto_init(intport,intbaud);
//設(shè)備密碼格式
[DllImport("Mwic_32.dll",EntryPoint="setsc_md",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternintsetsc_md(inticdev,intmode);
//獲取設(shè)備當(dāng)前狀態(tài)
[DllImport("Mwic_32.dll",EntryPoint="get_status",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternInt16get_status(inticdev,Int16*state);
//關(guān)閉設(shè)備通訊接口
[DllImport("Mwic_32.dll",EntryPoint="ic_e*it",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternintic_e*it(inticdev);
//使設(shè)備發(fā)出蜂鳴聲
[DllImport("Mwic_32.dll",EntryPoint="dv_beep",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternintdv_beep(inticdev,inttime);
//向IC卡中寫數(shù)據(jù)
[DllImport("Mwic_32.dll",EntryPoint="swr_4442",SetLastError=true,CharSet=CharSet.Ansi,E*actSpelling=true,CallingConvention=CallingConvention.StdCall)]
publicstatice*ternintswr_4442(inticdev,intoffset,intlen,char*w_string);
//核對卡密碼
[DllImport("Mwic_32.dll",EntryPoint="csc_4442",SetLastError=true,CharSet=CharSet.Auto,E*actSpelling=true,CallingConvention=CallingConvention.Winapi)]
publicstatice*ternInt16Csc_4442(inticdev,intlen,[MarshalAs(UnmanagedType.LPArray)]byte[]p_string);}下面代碼主要用于將Te*tBo*中數(shù)據(jù)寫入到IC卡中。代碼如下:
privatevoidbutton1_Click(objectsender,EventArgse)
{
//初始化
inticdev=IC.auto_init(0,9600);
if(icdev<0)
MessageBo*.Show("端口初始化失敗,請檢查接口線是否連接正確。","錯(cuò)誤提示",MessageBo*Buttons.OK,MessageBo*Icon.Information);
intmd=IC.setsc_md(icdev,1);//設(shè)備密碼格式
unsafe
{
Int16status=0;
Int16result=0;
result=IC.get_status(icdev,&status);
if(result!=0)
{
MessageBo*.Show("設(shè)備當(dāng)前狀態(tài)錯(cuò)誤!");
intd1=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
return;
}
if(status!=1)
{
MessageBo*.Show("請插入IC卡");
intd2=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
return;
}
}
unsafe
{
//卡的密碼默認(rèn)為6個(gè)f〔密碼為:ffffff〕,1個(gè)f的16進(jìn)制是15,兩個(gè)f的16進(jìn)制是255
byte[]pwd=newbyte[3]{255,255,255};
//byte[]pwd=newbyte[3]{0*ff,0*ff,0*ff};
//char[]pass=newch{0*ff,0*ff,0*ff};
Int16checkIC_pwd=IC.Csc_4442(icdev,3,pwd);
if(checkIC_pwd<0)
{
MessageBo*.Show("IC卡密碼錯(cuò)誤!");
return;
}
charstr='a';
intwrite=-1;
for(intj=0;j<te*tBo*1.Te*t.Length;j++)
{
str=Convert.ToChar(te*tBo*1.Te*t.Substring(j,1));
write=IC.swr_4442(icdev,33+j,te*tBo*1.Te*t.Length,&str);
}
if(write==0)
{
intbeep=IC.dv_beep(icdev,20);
//發(fā)出蜂鳴聲
MessageBo*.Show("數(shù)據(jù)已成功寫入IC卡中!");
}
else
MessageBo*.Show("數(shù)據(jù)寫入IC卡失敗!");
}
intd=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
}舉一反三
根據(jù)本實(shí)例,讀者可以實(shí)現(xiàn)以下功能。
在圖書借閱中使用IC卡。
利用IC卡控制上網(wǎng)。實(shí)例423讀取IC卡中的數(shù)據(jù)實(shí)例說明
向IC卡寫入數(shù)據(jù)后,就可以進(jìn)展讀卡操作了。運(yùn)行本例,將寫入數(shù)據(jù)的IC卡插入讀卡器,單擊【讀卡】按鈕,IC卡中的數(shù)據(jù)將顯示在文本框中。如圖13.7所示。技術(shù)要點(diǎn)
本例中主要調(diào)用srd_4442函數(shù)讀取IC卡中的數(shù)據(jù),相關(guān)函數(shù)介紹請參考實(shí)例“向IC卡中寫入數(shù)據(jù)〞中的“技術(shù)要點(diǎn)〞局部。這里只介紹讀卡函數(shù)。qsrd_4442函數(shù)該函數(shù)用于讀取IC卡中的數(shù)據(jù)。語法如下:publicstatice*ternintsrd_4442(inticdev,intoffset,intlen,char*r_string);參數(shù)說明如下。l
icdev:標(biāo)識設(shè)備句柄,通常是auto_init函數(shù)的返回值。l
offset:標(biāo)識地址的偏移量,*圍是0~255。l
len:標(biāo)識字符串長度。l
r_string:用于存儲返回的數(shù)據(jù)。實(shí)現(xiàn)過程
〔1〕新建一個(gè)工程,命名為E*13_06,默認(rèn)窗體為Form1。〔2〕在Form1窗體中,主要添加兩個(gè)Button控件,用于讀取卡中的數(shù)據(jù)和退出程序,添加一個(gè)Te*tBo*控件,顯示卡中的數(shù)據(jù)。〔3〕主要程序代碼。
privatevoidbutton1_Click(objectsender,EventArgse)
{
//初始化
inticdev=IC.auto_init(0,9600);
if(icdev<0)
MessageBo*.Show("端口初始化失敗,請檢查接口線是否連接正確。","錯(cuò)誤提示",MessageBo*Buttons.OK,MessageBo*Icon.Information);
intmd=IC.setsc_md(icdev,1);//設(shè)備密碼格式
inti=IC.dv_beep(icdev,10);
//發(fā)出蜂鳴聲
unsafe
{
Int16status=0;
Int16result=0;
result=IC.get_status(icdev,&status);
if(result!=0)
{
MessageBo*.Show("設(shè)備當(dāng)前狀態(tài)錯(cuò)誤!");
intd1=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
return;
}
if(status!=1)
{
MessageBo*.Show("請插入IC卡");
intd2=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
return;
}
}
unsafe
{
charstr='a';
intread=-1;
for(intj=0;j<6;j++)
{
read=IC.srd_4442(icdev,33+j,1,&str);
te*tBo*1.Te*t=te*tBo*1.Te*t+Convert.ToString(str);
}
if(read==0)
MessageBo*.Show("IC卡中數(shù)據(jù)讀取成功!");
}
intd=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
}舉一反三
根據(jù)本實(shí)例,讀者可以開發(fā)以下程序。
讀取IC卡系統(tǒng)。
公交車刷卡系統(tǒng)。實(shí)例424利用IC卡制作考勤程序?qū)嵗f明
IC卡廣泛應(yīng)用于各行業(yè),包括銀行卡、公交車刷卡系統(tǒng)、讀書卡等。下面介紹使用IC卡制作簡單的公司考勤系統(tǒng)。運(yùn)行本例,單擊【刷卡】按鈕,即可對員工進(jìn)展考勤。實(shí)現(xiàn)效果如圖13.8所示。技術(shù)要點(diǎn)
有關(guān)IC卡的操作函數(shù)請參考實(shí)例“向IC卡中寫入數(shù)據(jù)〞和“讀取IC卡中的數(shù)據(jù)〞中的“技術(shù)要點(diǎn)〞局部。下面主要介紹通過IC卡如何實(shí)現(xiàn)員工考勤。主要將寫入IC卡中的卡號讀取出來,然后從數(shù)據(jù)表中查詢員工信息。具體代碼請參考實(shí)現(xiàn)過程。實(shí)現(xiàn)過程
〔1〕新建一個(gè)工程,命名為E*13_07,默認(rèn)窗體為Form1。〔2〕在Form1窗體中,主要添加5個(gè)Te*tBo*控件和6個(gè)Label控件,用途如圖13.7所示,添加一個(gè)Button控件,執(zhí)行刷IC卡命令。〔3〕主要程序代碼。
privatevoidbutton1_Click(objectsender,EventArgse)
{
//初始化
inticdev=IC.auto_init(0,9600);
if(icdev<0)
label6.Te*t="端口初始化失敗,請檢查接口線是否連接正確。";
unsafe
{
Int16status=-1;
Int16result=IC.get_status(icdev,&status);
intmd=IC.setsc_md(icdev,1);
//設(shè)備密碼格式
if(result<0)
{
intd1=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
return;
}
elseif((result==0)&&(status==0))
{
intd2=IC.ic_e*it(icdev);
//關(guān)閉設(shè)備
label6.Te*t="請插入IC卡";
return;
}
}
unsafe
{
charstr='a';
intread=-1;
stringic=";
for(intj=0;j<6;j++)
{
read=IC.srd_4442(icdev,33+j,1,&str);
ic=ic+Convert.ToString(str);
}
te*tB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度標(biāo)磚及環(huán)保涂料采購合同3篇
- 2024年版東莞市土地使用權(quán)出讓合同
- 2025廠房買賣合同-航空航天產(chǎn)業(yè)基地產(chǎn)權(quán)交易及配套設(shè)施移交3篇
- 2024標(biāo)準(zhǔn)二手車交易協(xié)議樣本一
- 2024校長任期管理與績效提升聘用合同規(guī)范文本2篇
- 2024標(biāo)準(zhǔn)個(gè)人勞務(wù)合作協(xié)議模板版
- 2024年食品包裝OEM供應(yīng)協(xié)議
- 2025年度教育機(jī)構(gòu)實(shí)驗(yàn)室場地借用及設(shè)備維護(hù)協(xié)議3篇
- 2024年閣樓銷售協(xié)議綜合版版B版
- 2024年網(wǎng)球賽事:場館租借合同3篇
- 低空經(jīng)濟(jì)公司設(shè)立可行性分析
- 2024新能源風(fēng)電場集電線路施工方案
- 2023-2024學(xué)年江西省吉安市吉州區(qū)八年級(上)期末數(shù)學(xué)試卷(含解析)
- 建筑工程周轉(zhuǎn)材料及保證措施
- 鐵路調(diào)車作業(yè)技能培訓(xùn)課件
- 臨床醫(yī)學(xué)研究的基本原則
- 市屬國有企業(yè)全資子公司管理辦法
- 攝影師的年度述職-捕捉美好定格永恒
- 《中國的河流(第2課時(shí) 滾滾長江)》示范課教學(xué)設(shè)計(jì)【湘教版八年級地理上冊】
- 酒店婚慶可行性方案
- 教師法律法規(guī)講座課件
評論
0/150
提交評論