Smartcard telah umum digunakan untuk aplikasi-aplikasi sekarang ini. Diantaranya dari mulai yang sederhana sebagai kartu absensi, sampai sebagai alat pembayaran. Kalau anda jeli, di kartu kredit terbaru juga sudah menggunakan chip smartcard ini. Nah bagaimana kita berhubungan dengan smartcard engan menggunakan CSharp ini ?
Untuk membaca smartcard ini, biasanya dibutuhkan smartcard reader. Bentuk masing-masing smartcard reader ini berbeda-beda dengan koneksi ke komputer juga berbeda-beda. Ada yang menggunakan USB atau Serial. Nah untuk contoh ini kita akan menggunakan smartcard reader dengan koneksi USB. Kebetulan yang tersedia adalah ACR 122.
Kita akan menggunakan API yang disediakan oleh windows untuk berhubungan dengan smartcard yang terdapat pada winscard.dll. kita akan belajar cara memanggil fungsi-fungsi yang ada di winscard ini melalui C#. Yang paling utama adalah penggunaan System.Runtime.InteropServices beserta import untuk fungsi-fungsi yang akan kita gunakan. Jadi akan ada rutin seperti ini:
dan untuk menggunakan fungsi-fungsi dalam winscard, perlu kita import fungsi-fungsi tersebut. Potongan programnya adalah sebagai berikut:
Ok, program yang akan kita buat ini berisi satu buah button dan satu buah listbox. Button ini digunakan untuk mendeteksi adanya reader yang tersambung ke komputer kita. Sedangkan listbox digunakan untuk menampung nama-nama reader yang tersambung. Tampilan dari program tersebut adalah seperti yang terlihat pada gambar dibawah ini:
Kode lengkapnya adalah seperti yang terlihat pada rutin berikut ini:
Selamat Mencoba!!!
Kita akan menggunakan API yang disediakan oleh windows untuk berhubungan dengan smartcard yang terdapat pada winscard.dll. kita akan belajar cara memanggil fungsi-fungsi yang ada di winscard ini melalui C#. Yang paling utama adalah penggunaan System.Runtime.InteropServices beserta import untuk fungsi-fungsi yang akan kita gunakan. Jadi akan ada rutin seperti ini:
using System.Runtime.InteropServices;
dan untuk menggunakan fungsi-fungsi dalam winscard, perlu kita import fungsi-fungsi tersebut. Potongan programnya adalah sebagai berikut:
[DllImport("winscard.dll")] private extern static int SCardEstablishContext(int scope, IntPtr reserved1, IntPtr reserved2, out int hContext); [DllImport("winscard.dll")] private extern static int SCardReleaseContext(int hContext); [DllImport("winscard.dll")] private static extern int SCardListReaders(int hContext, string cGroups, ref string cReaderLists, ref int nReaderCount);
Ok, program yang akan kita buat ini berisi satu buah button dan satu buah listbox. Button ini digunakan untuk mendeteksi adanya reader yang tersambung ke komputer kita. Sedangkan listbox digunakan untuk menampung nama-nama reader yang tersambung. Tampilan dari program tersebut adalah seperti yang terlihat pada gambar dibawah ini:
Kode lengkapnya adalah seperti yang terlihat pada rutin berikut ini:
using System; using System.Windows.Forms; using System.Runtime.InteropServices; public class RFIDForm : Form { //private int SCARD_SCOPE_USER = 0; //private int SCARD_SCOPE_TERMINAL = 1; private int SCARD_SCOPE_SYSTEM = 2; //private int SCARD_AUTOALLOCATE = -1; [DllImport("winscard.dll")] private extern static int SCardEstablishContext(int scope, IntPtr reserved1, IntPtr reserved2, out int hContext); [DllImport("winscard.dll")] private extern static int SCardReleaseContext(int hContext); [DllImport("winscard.dll")] private static extern int SCardListReaders(int hContext, string cGroups, ref string cReaderLists, ref int nReaderCount); private System.Windows.Forms.ListBox listReaders; private System.Windows.Forms.Button btnDetect; public RFIDForm() { listReaders = new System.Windows.Forms.ListBox(); btnDetect = new System.Windows.Forms.Button(); // // listReaders // listReaders.FormattingEnabled = true; listReaders.Location = new System.Drawing.Point(11, 43); listReaders.Size = new System.Drawing.Size(187, 238); listReaders.TabIndex = 0; // // btnDetect // btnDetect.Location = new System.Drawing.Point(13, 9); btnDetect.Size = new System.Drawing.Size(185, 28); btnDetect.TabIndex = 1; btnDetect.Text = "Deteksi Reader"; btnDetect.UseVisualStyleBackColor = true; btnDetect.Click += new System.EventHandler(btnDetect_Click); // // RFIDForm // Size = new System.Drawing.Size(416, 320); Controls.Add(btnDetect); Controls.Add(listReaders); Text = "Deteksi Reader RFID (abcsharpind.blogspot.com)"; } private void btnDetect_Click(object sender, EventArgs e) { int ret; int hContext; String ReaderList="" + Convert.ToChar(0); int readernum=-1; String[] Reader; ret = SCardEstablishContext(SCARD_SCOPE_SYSTEM, IntPtr.Zero, IntPtr.Zero, out hContext); ret = SCardListReaders(hContext, null, ref ReaderList, ref readernum); if (ret == 0) { Reader = ReaderList.Split(Convert.ToChar(0)); listReaders.Items.Clear(); for (int i=0; i < Reader.Length; i++) { listReaders.Items.Add(Reader[i]); } listReaders.SelectedIndex = 0; } ret = SCardReleaseContext(hContext); } public static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); RFIDForm p ; p = new RFIDForm(); Application.Run(p); } }Simpanlah dengan nama RFIDForm.cs dan lakukan kompilasi.
Selamat Mencoba!!!
1 comments:
Post a Comment