Pengembangan sekunder sensor sidik jari di Delphi
1. Pengenalan sensor sidik jari
Sidik jari mempunyai reputasi sebagai "bukti fisik pertama". Kesimpulan komunitas ilmiah mengenai sidik jari adalah: Dengan asumsi ada 5 miliar orang di bumi, diperlukan waktu 300 tahun agar dua sidik jari yang identik muncul. Terlihat bahwa keunikan sidik jari mempunyai status yang tidak terbantahkan.
Sensor sidik jari mengubah sistem keamanan digital seperti yang kita kenal untuk pertama kalinya. Sebelumnya, semuanya bergantung pada password. Anda harus menggunakan nama pengguna Anda sendiri dan mengkonfigurasi sistem Anda. Anda harus menutupi keyboard Anda agar orang lain tidak dapat melihat kata sandi Anda. Namun, jika Anda tidak berhati-hati, siapa pun dapat dengan mudah mencuri kata sandi Anda.
Pakar terkait memperkirakan: "Melalui sistem pengenalan sidik jari, kami telah memperluas kebutuhan keamanan pengguna komputer rumahan dan bisnis. Dalam waktu dekat, baik itu di jaringan area lokal atau Internet, baik saat mendaftar atau mengakses data keamanan, mustahil melakukannya." Tidak perlu lagi kata sandi, yang diperlukan hanyalah satu sentuhan jari Anda."
2. Pengantar pengembangan sekunder pemindai sidik jari
Saat ini terdapat banyak produsen pemindai sidik jari di dunia, dan mereka memiliki pengaruh yang besar. Seri U.are.U dari DigitalPersona adalah yang paling banyak digunakan. DigitalPersona adalah produsen keyboard komputer terbesar di dunia termasuk dalam kesepakatan dengan Chicony Electronics untuk mengintegrasikan sistem keamanan penginderaan sidik jari U.are.U DigitalPersona ke dalam keyboard yang dibuat antara lain untuk HP, Compaq dan IBM.
Pengembangan sekunder dari sensor sidik jari yang diperkenalkan dalam artikel ini didasarkan pada U.are.U 2000 milik DigitalPersona. U.are.U adalah singkatan dari you are you (you are you) U.are.U 2000 Micro Fingerprint Collection The perangkat dapat secara otomatis membaca gambar sidik jari dan mengirimkan gambar sidik jari digital ke komputer melalui antarmuka USB. Ini adalah aksesori ideal untuk laptop, desktop, atau perangkat PC lain yang memerlukan otentikasi.
U.are.U 2000 adalah pembaca sidik jari yang ringkas dan berbiaya rendah. Ini mengintegrasikan sistem optik presisi, sumber cahaya LED, dan kamera CMOS untuk bekerja sama melakukan kontrol tegangan dan koreksi otomatis selama pengambilan gambar, dan menggunakan antarmuka USB plug-and-play. Koleksi pemindaian sidik jari U.are.U 2000 dirancang untuk itu mengarah ke algoritma, aplikasi, dan antarmuka Sidik Jari DigitalPersona U.are.U ke DigitalPersona Universal Authentication Manager (UAM) - aplikasi terkait sidik jari ini mencakup Windows Login, kunci layar, penggantian kata sandi, dan drive disk terenkripsi.
Saat membeli produk perangkat keras sensor sidik jari, pedagang biasanya menyertakan driver perangkat keras, manual produk, kit pengembangan sekunder, dan contoh program pengembangan. Melalui software development kit (SDK), fungsi pengenalan sidik jari dapat ditambahkan ke aplikasi.
3. Teknologi kunci dalam proses pengembangan sekunder pemindai sidik jari
1. panggilan dll
Pertama, mari kita perkenalkan metode pemanggilan dll dalam kit pengembangan sensor sidik jari di delpi. Tempatkan uruShell.dll dalam paket pengembangan di direktori program atau direktori Sistem. Demi kejelasan, pernyataan panggilan DLL terkonsentrasi di unit program Shelluru.pas, di mana fungsi uruShell.dll diekspor dan pernyataan referensi terkait dibuat. Kode sumber spesifiknya adalah sebagai berikut:
unit Shelluru;
antarmuka
menggunakan jendela, Pesan;
konstanta
FT_OK = 0; // Berhasil
FT_ERR_NO_INIT = -1; // Tidak ada inisialisasi
FT_ERR_UNKNOWN_DEVICE = -10; // Perangkat tidak dikenal
FT_ERR_DEVICE_CONNECTED = -18; // Perangkat terhubung
FT_ERR_NO_DEVICE_CONNECTED = -19; // Tidak ada perangkat yang dapat dihubungkan
MAX_REGISTER_COUNT= 8; // Jumlah maksimum register
ERR_REGISTER_FAIL= -110; // Pendaftaran gagal
ERR_VERIFY_FAIL= -111; // Verifikasi gagal
ERR_REGISTER_COUNT= -112; //Jumlah registrasi
{Berikut ini adalah pesan khusus, pesan akuisisi sidik jari MSG_FINGER_CAPTURED; }Pesan menunggu sidik jari MSG_WAITING_FOR_IMAGE.
MSG_FINGER_CAPTURED= WM_USER+80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
jenis
PRegisterPixels = ^TRegisterPixels;
TRegisterPixels = array[1..MAX_REGISTER_COUNT] dari Pointer;
///uru_Init menginisialisasi sensor sidik jari. Parameter: numOfDev mengembalikan jumlah sensor sidik jari yang terhubung ke komputer; FeatureLen mengembalikan panjang data sidik jari.
fungsi uru_Init(var numOfDev, FeatureLen: integer): integer;
///uru_Connect menghubungkan ke sensor sidik jari tertentu. Parameter: PerangkatTidak ada nomor sensor sidik jari.
fungsi uru_Connect(Nomor Perangkat: bilangan bulat): bilangan bulat;
///uru_Terminate terputus dari sensor sidik jari. Parameter: PerangkatTidak ada nomor sensor sidik jari.
prosedur uru_Terminate(Nomor Perangkat: stdcall);
///uru_AllocFeature memberikan alamat data sidik jari. Parameter: Penunjuk alamat dikembalikan oleh Fitur.
prosedur uru_AllocFeature(Fitur var: penunjuk);
///uru_FreeFeature merilis alamat yang dialokasikan. Parameter: Penunjuk alamat dikembalikan oleh Fitur.
prosedur uru_FreeFeature(Fitur var: penunjuk);
///uru_GetImageWidth mendapatkan lebar gambar sidik jari.
fungsi uru_GetImageWidth: bilangan bulat;
///uru_GetImageHeight mendapatkan tinggi gambar sidik jari.
fungsi uru_GetImageHeight: bilangan bulat;
///uru_Register fungsi registrasi sidik jari. Parameter: pegangan jendela hwnd, digunakan untuk transmisi pesan; Nomor sensor sidik jari DevieceNo;
///fngCount waktu registrasi sidik jari; Penunjuk koneksi gambar sidik jari piksel;
fungsi uru_Register(hwnd: HWND; DeviceNo, fngCount: integer;Pixels: PRegisterPixels; Fitur: pointer): integer;
///uru_AcquireFungsi verifikasi sidik jari. Parameter: pegangan jendela hwnd, digunakan untuk transmisi pesan; nomor sensor sidik jari DevieceNo.
function uru_AcquireFeatures(hwnd: HWND; DeviceNo: integer; Piksel, Fitur: pointer): stdcall;
///uru_verifyMenampilkan fungsi perbandingan sidik jari. Parameter: srcFeatures perlu membandingkan data sidik jari; dstFeatures perlu membandingkan data sidik jari.
fungsi uru_verifyFeatures(srcFeatures, dstFeatures: penunjuk): Boolean;
///fungsi registrasi dll
prosedur uru_DllRegister;
///Ganggu fungsi pencitraan sensor sidik jari tertentu. Parameter: PerangkatTidak ada nomor sensor sidik jari.
Prosedur uru_StopGetImage(DeviceNO:Integer);Stdcall;
pelaksanaan
konstanta
DLLNAME= 'uruShell.dll';
{Berikut ini adalah deklarasi pemanggilan fungsi yang diekspor dari uruShell.dll}
fungsi uru_Init;DLLNAME eksternal;
fungsi uru_Connect;DLLNAME eksternal;
prosedur uru_Terminate; DLLNAME eksternal;
prosedur uru_AllocFeature; DLLNAME eksternal;
prosedur uru_FreeFeature; DLLNAME eksternal;
fungsi uru_GetImageWidth; DLLNAME eksternal;
fungsi uru_GetImageHeight;DLLNAME eksternal;
fungsi uru_Register; DLLNAME eksternal;
fungsi uru_AcquireFeatures; DLLNAME eksternal;
fungsi uru_verifyFeatures;DLLNAME eksternal;
prosedur uru_DllRegister; DLLNAME eksternal;
Prosedur uru_StopGetImage;DLLNAME eksternal;
akhir.
Setelah menyelesaikan pekerjaan di atas, Anda dapat mereferensikan file Shelluru.pas di file proyek utama, lalu memanggil fungsi yang ditentukan dalam file Shelluru.pas.
2. Simpan data sidik jari yang terverifikasi dalam file atau database
Dengan memanggil fungsi-fungsi yang ditentukan di atas, kita dapat menerapkan sistem identifikasi sidik jari untuk registrasi sidik jari, verifikasi, penyimpanan data sidik jari, dan verifikasi ulang sidik jari (pengenalan). Berikut fokus implementasi pemrograman proses registrasi sidik jari dan verifikasi identifikasi:
prosedur TForm1.BtnRegisterClick(Pengirim: TObject); file://Daftar sidik jari
var
saya: bilangan bulat;
mulai
jika UserList.Selected = nihil maka
mulai
MessageBox(application.Handle, 'Silakan pilih pengguna terlebih dahulu!', nil, MB_OK);
KELUAR;
akhir;
jika UserList.Selected.Data <> nihil maka
Fitur := UserList.Selected.Data file://Feature kosong saat ini
kalau tidak
uru_AllocFeature(Fitur);
jika Fitur = nihil maka file://Jika fitur sidik jari kosong
mulai
Status.SimpleText := 'Tidak dapat mengalokasikan memori Fitur';
KELUAR;
akhir;
untuk saya := 1 sampai 4 lakukan
mulai
FillChar(Piksel[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Gambar[i].Segarkan;
akhir;
Status.SimpleText := 'Mulai registrasi' + UserList.Selected.Caption + 'Sidik Jari...';
jika uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK maka
mulai
Status.SimpleText := UserList.Selected.Caption + ': Pendaftaran berhasil!';
jika UserList.Selected.Data = nihil maka
Daftar Pengguna.Dipilih.Data := Fitur;
akhir
kalau tidak
mulai
jika UserList.Selected.Data = nihil maka uru_FreeFeature(Fitur);
Status.SimpleText := UserList.Selected.Caption + ': Pendaftaran gagal!';
akhir;
akhir;
Fungsi ini terutama memanggil fungsi uru_Register di DLL untuk mendaftarkan sidik jari bagi pengguna. Mendaftarkan sidik jari adalah mengekstrak nilai karakteristik sidik jari, mengalokasikan salah satu ujung memori untuk nilai karakteristik guna menyimpan data nilai karakteristik sidik jari, dan menggunakan penunjuk ke arahkan ke memori ini, sehingga dapat diambil kembali di masa mendatang. Setelah pendaftaran selesai, harus segera dilakukan verifikasi untuk memastikan kebenaran data. Proses verifikasinya adalah sebagai berikut:
prosedur TForm1.BtnVerifyClick(Pengirim: TObject); file://verifikasi sidik jari
var
aFitur: penunjuk;
saya: bilangan bulat;
jalur jari: senar;
mulai
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//jalur penyimpanan data sidik jari
jika UserList.Selected = nihil maka
mulai
MessageBox(Application.Handle, 'Silakan pilih pengguna terlebih dahulu!', nil, MB_OK);
KELUAR;
akhir;
jika UserList.Selected.Data = nihil maka
mulai
MessageBox(Application.Handle, PChar(Format('Pengguna %s belum mendaftarkan sidik jari, silakan mendaftar terlebih dahulu!', [UserList.Selected.Caption])), nihil, MB_OK);
KELUAR;
akhir;
FillChar(Piksel[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Gambar[5].Segarkan;
Status.SimpleText := 'Mulai verifikasi' + UserList.Selected.Caption + 'Sidik Jari...';
Fitur := UserList.Selected.Data; file://Fingerprint data perlu dibandingkan
move(Feature^,byt,len); file://Memindahkan segmen dalam memori dengan panjang len, dan memindahkan data mulai dari Feature ke array byte
uru_AllocFeature(aFeature);//Menetapkan alamat data sidik jari
jika (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) dan uru_verifyFeatures(@byt, aFeature) maka
file://uru_AcquireFeaturesVerifikasi Sidik Jari
file://uru_verifyFeaturesPerbandingan sidik jari
mulai
Status.SimpleText := UserList.Selected.Caption + ': Verifikasi berhasil!';
AssignFile(F,fingerpath);//Menetapkan file
Tulis Ulang(F);//Tulis ulang file
untuk i:=0 untuk len lakukan
Write(F,byt[i]);//Menulis data sensor sidik jari ke file
CloseFile(F);//Tutup file
akhir
kalau tidak
Status.SimpleText := UserList.Selected.Caption + ': Verifikasi gagal!';
uru_FreeFeature(aFeature); file://memori rilis
akhir;
Kunci dari proses diatas adalah segera menyimpan data sidik jari di memori ke dalam file data setelah verifikasi sidik jari berhasil. Nama file data sebaiknya berupa nama pengguna ditambah nomor, sehingga data sidik jari pengguna yang bersangkutan dapat dengan mudah ditemukan pada verifikasi berikutnya. Terakhir, ingatlah untuk melepaskan memori yang dialokasikan sementara. Menyimpan data sidik jari dalam sebuah file. Anda kemudian dapat membuka file untuk mengambil file data dan melakukan proses pencocokan dengan pengguna saat ini untuk memverifikasi identitas pengguna yang benar.
prosedur TForm1.BitBtn2Click(Pengirim: TObject); file://Verifikasi sidik jari pengguna lama
var
aFitur1: penunjuk;
saya: bilangan bulat;
mulai
jika OpenDialog1.Jalankan lalu
mulai
AssignFile(G,OpenDialog1.FileName);//Tentukan file
Setel Ulang(G);//Setel ulang berkas
untuk i:=0 untuk len lakukan
Read(G, byt2[i]);//Memindahkan data sensor sidik jari dalam file ke array byte2
CloseFile(G);//Tutup file
akhir;
FillChar(Piksel[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Gambar[5].Segarkan;
Status.SimpleText := 'Mulai verifikasi' + UserList.Selected.Caption + 'Sidik Jari...';
uru_AllocFeature(aFeature1);//Menetapkan alamat data sidik jari
jika (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) dan uru_verifyFeatures(@byt2, aFeature1) maka
Status.SimpleText := UserList.Selected.Caption + ': Verifikasi berhasil!'
kalau tidak
Status.SimpleText := UserList.Selected.Caption + ': Verifikasi gagal!';
uru_FreeFeature(aFeature1); file://memori rilis
akhir;
Bahkan, data sidik jari juga dapat disimpan dalam database, sehingga dapat diterapkan sistem struktur multi-layer. Data sidik jari diakses secara terpusat dalam database di server membacanya dari server ketika pengguna lama perlu memverifikasi data, memastikan keamanan.
4. Ringkasan
Artikel ini memperkenalkan penggunaan U.are.U 2000 Kit pengembangan sensor sidik jari dikembangkan untuk pengembangan sekunder guna menerapkan proses registrasi data sidik jari, verifikasi, penyimpanan data dan verifikasi ulang sidik jari lama. Proses ini dapat digunakan di beberapa sistem yang perlu mengidentifikasi identitas pribadi melalui sidik jari. Penulis mengembangkannya atas dasar ini. Sebuah prototipe sistem pengelolaan izin tinggal sementara untuk badan keamanan publik atau komunitas perumahan dikembangkan, yang pada dasarnya mewujudkan Fungsi pengelolaan izin tinggal sementara pengguna. Artikel ini hanya memperkenalkan metode pemanggilan DLL dalam paket pengembangan sensor sidik jari dan proses utama registrasi dan verifikasi dalam pengembangan sekunder perangkat sidik jari, karena relatif sederhana sehingga tidak perlu pembahasan yang mendalam. Pembaca dapat mengembangkannya sendiri berdasarkan fungsi yang disediakan dll. Selamat datang untuk menulis kepada saya untuk berdiskusi, email saya adalah [email protected]