การพัฒนาเซ็นเซอร์ลายนิ้วมือขั้นที่สองใน Delphi
1. รู้เบื้องต้นเกี่ยวกับเซ็นเซอร์ลายนิ้วมือ
ลายนิ้วมือมีชื่อเสียงว่าเป็น "หลักฐานทางกายภาพชิ้นแรก" ข้อสรุปของชุมชนวิทยาศาสตร์เกี่ยวกับลายนิ้วมือคือ: สมมติว่ามีผู้คน 5 พันล้านคนบนโลก จะต้องใช้เวลา 300 ปีกว่าลายนิ้วมือที่เหมือนกันสองลายนิ้วมือจะปรากฏ จะเห็นได้ว่าเอกลักษณ์ของลายนิ้วมือมีสถานะที่หักล้างไม่ได้
เซ็นเซอร์ลายนิ้วมือได้เปลี่ยนแปลงระบบรักษาความปลอดภัยดิจิทัลอย่างที่เรารู้จักเป็นครั้งแรก ก่อนหน้านี้ทุกอย่างอาศัยรหัสผ่าน คุณต้องใช้ชื่อผู้ใช้ของคุณเองและกำหนดค่าระบบของคุณ คุณต้องปิดแป้นพิมพ์ของคุณเพื่อไม่ให้ผู้อื่นเห็นรหัสผ่านของคุณ อย่างไรก็ตาม หากคุณไม่ระวัง ใครก็ตามที่จะขโมยรหัสผ่านของคุณก็เป็นเรื่องง่าย
ผู้เชี่ยวชาญที่เกี่ยวข้องคาดการณ์ว่า: "ด้วยระบบจดจำลายนิ้วมือ เราได้ขยายความต้องการด้านความปลอดภัยของผู้ใช้คอมพิวเตอร์ตามบ้านและที่ทำงาน ในอนาคตอันใกล้นี้ ไม่ว่าจะเป็นบนเครือข่ายท้องถิ่นหรืออินเทอร์เน็ต ไม่ว่าจะเป็นการลงทะเบียนหรือการเข้าถึงข้อมูลความปลอดภัย มันคงเป็นไปไม่ได้" ไม่ต้องใช้รหัสผ่านอีกต่อไป เพียงแค่ปลายนิ้วสัมผัส"
2. รู้เบื้องต้นเกี่ยวกับการพัฒนารองของเครื่องสแกนลายนิ้วมือ
ปัจจุบันมีผู้ผลิตเครื่องสแกนลายนิ้วมือหลายรายในโลกและมีอิทธิพลอย่างมาก DigitalPersona ซีรีส์ U.are.U เป็นผู้ผลิตแป้นพิมพ์คอมพิวเตอร์รายใหญ่ที่สุดในโลก รวมอยู่ในข้อตกลงกับ Chicony Electronics เพื่อรวมระบบรักษาความปลอดภัยการตรวจจับลายนิ้วมือ U.are.U ของ DigitalPersona เข้ากับคีย์บอร์ดที่สร้างขึ้นสำหรับ HP, Compaq และ IBM และอื่นๆ
การพัฒนาเซ็นเซอร์ลายนิ้วมือขั้นที่สองที่แนะนำในบทความนี้อิงจาก U.are.U 2000 ของ DigitalPersona U.are.U เป็นตัวย่อของคุณคือคุณ (you are you) อุปกรณ์สามารถอ่านภาพลายนิ้วมือโดยอัตโนมัติและส่งภาพลายนิ้วมือดิจิตอลไปยังคอมพิวเตอร์ผ่านอินเทอร์เฟซ USB เป็นอุปกรณ์เสริมที่เหมาะสำหรับแล็ปท็อป เดสก์ท็อป หรืออุปกรณ์พีซีอื่นๆ ที่ต้องมีการตรวจสอบสิทธิ์
U.are.U 2000 คือเครื่องอ่านลายนิ้วมือขนาดกะทัดรัดราคาประหยัด โดยผสานรวมระบบออปติคอลที่มีความแม่นยำ แหล่งกำเนิดแสง LED และกล้อง CMOS เพื่อทำงานร่วมกันเพื่อควบคุมแรงดันไฟฟ้าและการแก้ไขอัตโนมัติระหว่างการจับภาพ และใช้อินเทอร์เฟซ USB แบบปลั๊กแอนด์เพลย์ที่ออกแบบมาเพื่อ นำไปสู่อัลกอริธึมการพิมพ์ลายนิ้วมือ แอปพลิเคชัน และอินเทอร์เฟซของ DigitalPersona U.are.U ไปยัง DigitalPersona Universal Authentication Manager (UAM) - แอปพลิเคชันที่เกี่ยวข้องกับลายนิ้วมือเหล่านี้รวมถึง Windows การเข้าสู่ระบบ การล็อกหน้าจอ การเปลี่ยนรหัสผ่าน และดิสก์ไดรฟ์ที่เข้ารหัส
เมื่อซื้อผลิตภัณฑ์ฮาร์ดแวร์เซ็นเซอร์ลายนิ้วมือ ผู้ค้ามักจะรวมไดรเวอร์ฮาร์ดแวร์ คู่มือผลิตภัณฑ์ ชุดพัฒนารอง และตัวอย่างโปรแกรมการพัฒนา สามารถเพิ่มฟังก์ชันการจดจำลายนิ้วมือลงในแอปพลิเคชันได้ด้วยชุดพัฒนาซอฟต์แวร์ (SDK)
3. เทคโนโลยีหลักในกระบวนการพัฒนารองของเครื่องสแกนลายนิ้วมือ
โทร 1.dll
ก่อนอื่น เรามาแนะนำวิธีการเรียก dll ในชุดพัฒนาเซ็นเซอร์ลายนิ้วมือใน delpi กันก่อน วาง uruShell.dll ในแพ็คเกจการพัฒนาในไดเร็กทอรีโปรแกรมหรือไดเร็กทอรีระบบ เพื่อความชัดเจน คำสั่งการเรียก DLL จะรวมอยู่ในหน่วยโปรแกรม Shelluru.pas ซึ่งมีการส่งออกฟังก์ชันของ uruShell.dll และจัดทำคำสั่งอ้างอิงที่เกี่ยวข้อง ซอร์สโค้ดเฉพาะมีดังนี้:
หน่วยเชลลูรู;
อินเตอร์เฟซ
ใช้ windows, ข้อความ;
ค่าคงที่
FT_OK = 0; // สำเร็จ
FT_ERR_NO_INIT = -1; // ไม่มีการกำหนดค่าเริ่มต้น
FT_ERR_UNKNOWN_DEVICE = -10; // อุปกรณ์ที่ไม่รู้จัก
FT_ERR_DEVICE_CONNECTED = -18; // เชื่อมต่ออุปกรณ์แล้ว
FT_ERR_NO_DEVICE_CONNECTED = -19; // ไม่สามารถเชื่อมต่ออุปกรณ์ได้
MAX_REGISTER_COUNT= 8; // จำนวนการลงทะเบียนสูงสุด
ERR_REGISTER_FAIL= -110; // การลงทะเบียนล้มเหลว
ERR_VERIFY_FAIL= -111; // การตรวจสอบล้มเหลว
ERR_REGISTER_COUNT= -112; // จำนวนการลงทะเบียน
{ต่อไปนี้เป็นข้อความที่กำหนดเอง ข้อความการรับลายนิ้วมือ MSG_FINGER_CAPTURED; }MSG_WAITING_FOR_IMAGE ข้อความรอลายนิ้วมือ
MSG_FINGER_CAPTURED= WM_USER + 80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
พิมพ์
PREgisterPixels = ^TRegisterPixels;
TRegisterPixels = array[1..MAX_REGISTER_COUNT] ของตัวชี้;
///uru_Init เริ่มต้นเซ็นเซอร์ลายนิ้วมือ พารามิเตอร์: numOfDev ส่งคืนจำนวนเซ็นเซอร์ลายนิ้วมือที่เชื่อมต่อกับคอมพิวเตอร์ FeatureLen ส่งคืนความยาวข้อมูลลายนิ้วมือ
ฟังก์ชั่น uru_Init (var numOfDev, FeatureLen: จำนวนเต็ม): จำนวนเต็ม stdcall;
///uru_Connect เชื่อมต่อกับเซ็นเซอร์ลายนิ้วมือเฉพาะ พารามิเตอร์: อุปกรณ์ไม่มีหมายเลขเซ็นเซอร์ลายนิ้วมือ
ฟังก์ชั่น uru_Connect (หมายเลขอุปกรณ์: จำนวนเต็ม): จำนวนเต็ม;
///uru_Terminate ตัดการเชื่อมต่อจากเซ็นเซอร์ลายนิ้วมือ พารามิเตอร์: อุปกรณ์ไม่มีหมายเลขเซ็นเซอร์ลายนิ้วมือ
ขั้นตอน uru_Terminate (หมายเลขอุปกรณ์: จำนวนเต็ม);
///uru_AllocFeature กำหนดที่อยู่ข้อมูลลายนิ้วมือ พารามิเตอร์: ตัวชี้ที่อยู่ส่งคืนโดยฟีเจอร์
ขั้นตอน uru_AllocFeature (คุณสมบัติ var: ตัวชี้ stdcall;
///uru_FreeFeature เผยแพร่ที่อยู่ที่จัดสรร พารามิเตอร์: ตัวชี้ที่อยู่ส่งคืนโดยฟีเจอร์
ขั้นตอน uru_FreeFeature (คุณสมบัติ var: ตัวชี้ stdcall;
///uru_GetImageWidth รับความกว้างของภาพลายนิ้วมือ
ฟังก์ชั่น uru_GetImageWidth: จำนวนเต็ม stdcall;
///uru_GetImageHeight รับความสูงของภาพลายนิ้วมือ
ฟังก์ชั่น uru_GetImageHeight: จำนวนเต็ม stdcall;
///uru_Register ฟังก์ชั่นการลงทะเบียนลายนิ้วมือ พารามิเตอร์: ที่จับหน้าต่าง hwnd ใช้สำหรับการส่งข้อความ DevieceNo หมายเลขเซ็นเซอร์ลายนิ้วมือ;
///fngCount ตัวชี้การเชื่อมต่อภาพลายนิ้วมือ พิกเซล มีตัวชี้ข้อมูลการลงทะเบียนลายนิ้วมือ
ฟังก์ชั่น uru_Register (hwnd: HWND; DeviceNo, fngCount: จำนวนเต็ม; Pixels: PREgisterPixels; คุณสมบัติ: ตัวชี้): จำนวนเต็ม;
///uru_AcquireFeatures ฟังก์ชั่นตรวจสอบลายนิ้วมือ พารามิเตอร์: ตัวจัดการหน้าต่าง hwnd ใช้สำหรับการส่งข้อความ DevieceNo หมายเลขเซ็นเซอร์ลายนิ้วมือ
ฟังก์ชั่น uru_AcquireFeatures (hwnd: HWND; DeviceNo: จำนวนเต็ม; พิกเซล, คุณสมบัติ: ตัวชี้): จำนวนเต็ม;
///uru_verifyFeatures ฟังก์ชั่นการเปรียบเทียบลายนิ้วมือ พารามิเตอร์: srcFeatures จำเป็นต้องเปรียบเทียบข้อมูลลายนิ้วมือ dstFeatures จำเป็นต้องเปรียบเทียบข้อมูลลายนิ้วมือ
ฟังก์ชั่น uru_verifyFeatures (srcFeatures, dstFeatures: ตัวชี้): stdcall;
///ฟังก์ชันการลงทะเบียน dll
ขั้นตอน uru_DllRegister;
/// ขัดจังหวะฟังก์ชันการถ่ายภาพเซ็นเซอร์ลายนิ้วมือเฉพาะ พารามิเตอร์: อุปกรณ์ไม่มีหมายเลขเซ็นเซอร์ลายนิ้วมือ
ขั้นตอน uru_StopGetImage(DeviceNO:Integer);Stdcall;
การดำเนินการ
ค่าคงที่
DLLNAME= 'uruShell.dll';
{ต่อไปนี้คือการประกาศเรียกใช้ฟังก์ชันที่ส่งออกของ uruShell.dll}
ฟังก์ชั่น uru_Init; DLLNAME ภายนอก;
ฟังก์ชั่น uru_Connect; DLLNAME ภายนอก;
ขั้นตอน uru_Terminate; DLLNAME ภายนอก;
ขั้นตอน uru_AllocFeature; DLLNAME ภายนอก;
ขั้นตอน uru_FreeFeature; DLLNAME ภายนอก;
ฟังก์ชั่น uru_GetImageWidth; DLLNAME ภายนอก;
ฟังก์ชั่น uru_GetImageHeight; DLLNAME ภายนอก;
ฟังก์ชั่น uru_Register; DLLNAME ภายนอก;
ฟังก์ชั่น uru_AcquireFeatures; DLLNAME ภายนอก;
ฟังก์ชั่น uru_verifyFeatures; DLLNAME ภายนอก;
ขั้นตอน uru_DllRegister; DLLNAME ภายนอก;
ขั้นตอน uru_StopGetImage; DLLNAME ภายนอก;
จบ.
หลังจากทำงานข้างต้นเสร็จแล้ว คุณสามารถอ้างอิงไฟล์ Shelluru.pas ในไฟล์โปรเจ็กต์หลัก จากนั้นเรียกใช้ฟังก์ชันที่กำหนดไว้ในไฟล์ Shelluru.pas
2. บันทึกข้อมูลลายนิ้วมือที่ตรวจสอบแล้วลงในไฟล์หรือฐานข้อมูล
ด้วยการเรียกใช้ฟังก์ชันที่กำหนดไว้ข้างต้น เราสามารถใช้ระบบระบุลายนิ้วมือสำหรับการลงทะเบียนลายนิ้วมือ การตรวจสอบ การจัดเก็บข้อมูลลายนิ้วมือ และการตรวจสอบลายนิ้วมือซ้ำ (การจดจำ) ต่อไปนี้จะมุ่งเน้นไปที่การใช้งานการเขียนโปรแกรมของการลงทะเบียนลายนิ้วมือและกระบวนการระบุตัวตนในการตรวจสอบ:
ขั้นตอน TForm1.BtnRegisterClick(Sender: TObject); file://Register ลายนิ้วมือ
var
ฉัน:จำนวนเต็ม;
เริ่ม
ถ้า UserList.Selected = ไม่มีแล้ว
เริ่ม
MessageBox(application.Handle, 'กรุณาเลือกผู้ใช้ก่อน!', ไม่มี, MB_OK);
ออก;
จบ;
ถ้า UserList.Selected.Data <> ไม่มีเลย
คุณลักษณะ := UserList.Selected.Data file://Feature ว่างเปล่าในขณะนี้
อื่น
uru_AllocFeature (ฟีเจอร์);
ถ้า Feature = nil แล้ว file://If คุณสมบัติลายนิ้วมือว่างเปล่า
เริ่ม
Status.SimpleText := 'ไม่สามารถจัดสรรหน่วยความจำคุณลักษณะได้';
ออก;
จบ;
สำหรับฉัน := 1 ถึง 4 ทำ
เริ่ม
FillChar(พิกเซล[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
รูปภาพ [i] รีเฟรช;
จบ;
Status.SimpleText := 'เริ่มการลงทะเบียน' + UserList.Selected.Caption + 'ลายนิ้วมือ...';
ถ้า uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK แล้ว
เริ่ม
Status.SimpleText := UserList.Selected.Caption + ': การลงทะเบียนสำเร็จ!';
ถ้า UserList.Selected.Data = ไม่มีแล้ว
UserList.Selected.Data := คุณสมบัติ;
จบ
อื่น
เริ่ม
ถ้า UserList.Selected.Data = ไม่มี ดังนั้น uru_FreeFeature (คุณสมบัติ);
Status.SimpleText := UserList.Selected.Caption + ': การลงทะเบียนล้มเหลว!';
จบ;
จบ;
ฟังก์ชันนี้เรียกฟังก์ชัน uru_Register ใน DLL เป็นหลักเพื่อลงทะเบียนลายนิ้วมือสำหรับผู้ใช้ การลงทะเบียนลายนิ้วมือคือการดึงค่าคุณลักษณะของลายนิ้วมือ จัดสรรปลายด้านหนึ่งของหน่วยความจำสำหรับค่าลักษณะเฉพาะเพื่อจัดเก็บข้อมูลค่าลักษณะเฉพาะของลายนิ้วมือ และใช้ตัวชี้เพื่อ ชี้ไปที่ความทรงจำนี้เพื่อที่จะสามารถเรียกคืนได้ในอนาคต หลังจากการลงทะเบียนเสร็จสิ้น จะต้องดำเนินการตรวจสอบทันทีเพื่อให้แน่ใจว่าข้อมูลถูกต้อง โดยมีขั้นตอนการตรวจสอบดังนี้
ขั้นตอน TForm1.BtnVerifyClick (Sender: TObject); file://verification
var
คุณลักษณะ: ตัวชี้;
ฉัน: จำนวนเต็ม;
ฟิงเกอร์พาธ: เชือก;
เริ่ม
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//เส้นทางการจัดเก็บข้อมูลลายนิ้วมือ
ถ้า UserList.Selected = ไม่มีแล้ว
เริ่ม
MessageBox(Application.Handle, 'กรุณาเลือกผู้ใช้ก่อน!', ไม่มี, MB_OK);
ออก;
จบ;
ถ้า UserList.Selected.Data = ไม่มีแล้ว
เริ่ม
MessageBox(Application.Handle, PChar(Format('ผู้ใช้ %s ยังไม่ได้ลงทะเบียนลายนิ้วมือ กรุณาลงทะเบียนก่อน!', [UserList.Selected.Caption])), nil, MB_OK);
ออก;
จบ;
FillChar(พิกเซล[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
รูปภาพ[5].รีเฟรช;
Status.SimpleText := 'เริ่มการยืนยัน' + UserList.Selected.Caption + 'ลายนิ้วมือ...';
คุณลักษณะ := UserList.Selected.Data; file://Fingerprint data need to be comparison
move(Feature^,byt,len); file://Move ส่วนในหน่วยความจำด้วยความยาวของ len และย้ายข้อมูลที่เริ่มต้นจาก Feature ไปยังอาร์เรย์ไบต์
uru_AllocFeature(aFeature);//กำหนดที่อยู่ข้อมูลลายนิ้วมือ
ถ้า (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) และ uru_verifyFeatures(@byt, aFeature) แล้ว
ไฟล์://uru_AcquireFeaturesการตรวจสอบลายนิ้วมือ
ไฟล์://uru_verifyFeaturesการเปรียบเทียบลายนิ้วมือ
เริ่ม
Status.SimpleText := UserList.Selected.Caption + ': การยืนยันสำเร็จ!';
AssignFile(F,fingerpath);//กำหนดไฟล์
ReWrite(F);//เขียนไฟล์ใหม่
สำหรับ i:=0 ถึง len do
Write(F,byt[i]);//เขียนข้อมูลเซ็นเซอร์ลายนิ้วมือลงในไฟล์
CloseFile(F);//ปิดไฟล์
จบ
อื่น
Status.SimpleText := UserList.Selected.Caption + ': การยืนยันล้มเหลว!';
uru_FreeFeature (aFeature); ไฟล์: // release memory
จบ;
หัวใจสำคัญของกระบวนการข้างต้นคือการบันทึกข้อมูลลายนิ้วมือในหน่วยความจำลงในไฟล์ข้อมูลทันทีหลังจากการตรวจสอบลายนิ้วมือเสร็จสิ้น ชื่อไฟล์ข้อมูลควรเป็นชื่อผู้ใช้บวกกับตัวเลข เพื่อให้ข้อมูลลายนิ้วมือของผู้ใช้ที่เกี่ยวข้องสามารถดำเนินการได้อย่างง่ายดาย พบในระหว่างการตรวจสอบครั้งต่อไป สุดท้ายนี้ อย่าลืมปล่อยหน่วยความจำที่จัดสรรไว้ชั่วคราว จัดเก็บข้อมูลลายนิ้วมือไว้ในไฟล์ จากนั้น คุณสามารถเปิดไฟล์เพื่อดึงไฟล์ข้อมูลและดำเนินการจับคู่กับผู้ใช้ปัจจุบันเพื่อตรวจสอบตัวตนที่ถูกต้องของผู้ใช้ได้ กระบวนการเฉพาะมีดังนี้:
ขั้นตอน TForm1.BitBtn2Click(Sender: TObject); file://Verify ลายนิ้วมือผู้ใช้เก่า
var
aFeature1: ตัวชี้;
ฉัน: จำนวนเต็ม;
เริ่ม
ถ้า OpenDialog1.Execute แล้ว
เริ่ม
AssignFile(G,OpenDialog1.FileName);//ระบุไฟล์
รีเซ็ต(G);//รีเซ็ตไฟล์
สำหรับ i:=0 ถึง len do
อ่าน(G, byt2[i]);//ย้ายข้อมูลเซ็นเซอร์ลายนิ้วมือในไฟล์ไปยังอาร์เรย์ byte2
CloseFile(G);//ปิดไฟล์
จบ;
FillChar(พิกเซล[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
รูปภาพ[5].รีเฟรช;
Status.SimpleText := 'เริ่มการยืนยัน' + UserList.Selected.Caption + 'ลายนิ้วมือ...';
uru_AllocFeature(aFeature1);//กำหนดที่อยู่ข้อมูลลายนิ้วมือ
ถ้า (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) และ uru_verifyFeatures(@byt2, aFeature1) แล้ว
Status.SimpleText := UserList.Selected.Caption + ': การยืนยันสำเร็จ!'
อื่น
Status.SimpleText := UserList.Selected.Caption + ': การยืนยันล้มเหลว!';
uru_FreeFeature (aFeature1); ไฟล์: // release memory
จบ;
ในความเป็นจริง ข้อมูลลายนิ้วมือยังสามารถเก็บไว้ในฐานข้อมูลเพื่อให้สามารถใช้ระบบโครงสร้างหลายชั้นได้ ข้อมูลลายนิ้วมือจะถูกเข้าถึงจากส่วนกลางในฐานข้อมูลบนเซิร์ฟเวอร์ ไคลเอนต์จะอัพโหลดข้อมูลการลงทะเบียนไปยังเซิร์ฟเวอร์ตามความจำเป็น อ่านจากเซิร์ฟเวอร์เมื่อผู้ใช้เก่าจำเป็นต้องได้รับการตรวจสอบข้อมูลเพื่อให้มั่นใจในความปลอดภัย
4. สรุป
บทความนี้จะแนะนำการใช้ U.are.U 2000 ชุดพัฒนาเซ็นเซอร์ลายนิ้วมือได้รับการพัฒนาสำหรับการพัฒนาขั้นที่สองเพื่อใช้กระบวนการลงทะเบียนข้อมูลลายนิ้วมือ การตรวจสอบ การจัดเก็บข้อมูล และการตรวจสอบซ้ำของลายนิ้วมือเก่า กระบวนการนี้สามารถใช้ได้ในบางระบบที่จำเป็นต้องระบุตัวตนส่วนบุคคลผ่านลายนิ้วมือ ผู้เขียนพัฒนาขึ้นบนพื้นฐานนี้ ต้นแบบของระบบการจัดการใบอนุญาตผู้พำนักชั่วคราวสำหรับหน่วยงานความมั่นคงสาธารณะหรือชุมชนที่อยู่อาศัยได้รับการพัฒนาซึ่งส่วนใหญ่ตระหนักถึง ฟังก์ชันการจัดการใบอนุญาตมีถิ่นที่อยู่ชั่วคราวของผู้ใช้ บทความนี้จะแนะนำวิธีการเรียก DLL ในแพ็คเกจการพัฒนาเซ็นเซอร์ลายนิ้วมือและขั้นตอนสำคัญของการลงทะเบียนและการตรวจสอบในการพัฒนาขั้นที่สองเท่านั้น อุปกรณ์ลายนิ้วมือเนื่องจาก มันค่อนข้างง่ายดังนั้นจึงไม่มีการสนทนาเชิงลึก ผู้อ่านสามารถพัฒนาได้เองตามฟังก์ชั่นที่ได้รับจาก dll ยินดีต้อนรับสู่การเขียนถึงฉันเพื่อหารือ อีเมลของฉันคือ [email protected]