التطوير الثانوي لمستشعر بصمة الإصبع في دلفي
1. مقدمة عن مستشعر بصمة الإصبع
تتمتع بصمات الأصابع بسمعة "أول الأدلة المادية". الاستنتاج الذي توصل إليه المجتمع العلمي بشأن بصمات الأصابع هو: بافتراض أن هناك 5 مليارات شخص على وجه الأرض، فإن ظهور بصمتين متطابقتين سيستغرق 300 عام. يمكن ملاحظة أن تفرد بصمات الأصابع له مكانة لا يمكن دحضها.
لقد حولت أجهزة استشعار بصمات الأصابع أنظمة الأمن الرقمية كما نعرفها لأول مرة. في السابق، كان كل شيء يعتمد على كلمات المرور. يجب عليك استخدام اسم المستخدم الخاص بك وتكوين النظام الخاص بك. يجب عليك تغطية لوحة المفاتيح حتى لا يتمكن الآخرون من رؤية كلمة المرور الخاصة بك. ومع ذلك، إذا لم تكن حذرًا، فمن السهل على أي شخص سرقة كلمة المرور الخاصة بك.
ويتوقع الخبراء المعنيون: "من خلال نظام التعرف على بصمات الأصابع، قمنا بتوسيع الاحتياجات الأمنية لمستخدمي أجهزة الكمبيوتر المنزلية والتجارية. وفي المستقبل القريب، سواء كان ذلك على شبكة المنطقة المحلية أو الإنترنت، سواء كان ذلك عند التسجيل أو الوصول إلى البيانات الأمنية، سيكون من المستحيل القيام بذلك." لم تعد هناك حاجة لكلمة مرور، كل ما يتطلبه الأمر هو لمسة من إصبعك."
2. مقدمة للتطوير الثانوي لماسح بصمات الأصابع
يوجد حاليًا العديد من الشركات المصنعة لماسحات بصمات الأصابع في العالم، ولها تأثير كبير. سلسلة U.are.U من DigitalPersona هي الشركة الأكثر استخدامًا على نطاق واسع. تستخدم هذه الشركة بالفعل أنظمة أمان الهندسة الحيوية تم تضمينه في صفقة مع Chicony Electronics لدمج نظام أمان استشعار بصمات الأصابع الخاص بشركة DigitalPersona U.are.U في لوحات المفاتيح المصنوعة لشركة HP وCompaq وIBM وغيرها.
يعتمد التطوير الثانوي لمستشعر بصمة الإصبع الذي تم تقديمه في هذه المقالة على مجموعة U.are.U 2000 الخاصة بشركة DigitalPersona. U.are.U هو اختصار لـ you are you (أنت أنت U.are.U 2000 Micro Fingerprint Collection). يمكن للجهاز قراءة صور بصمات الأصابع تلقائيًا ونقل صور بصمات الأصابع الرقمية إلى الكمبيوتر من خلال واجهة USB. إنه ملحق مثالي لأجهزة الكمبيوتر المحمولة أو أجهزة الكمبيوتر المكتبية أو أجهزة الكمبيوتر الأخرى التي تتطلب المصادقة.
U.are.U 2000 هو قارئ بصمات الأصابع صغير الحجم ومنخفض التكلفة. فهو يدمج نظامًا بصريًا دقيقًا ومصدر ضوء LED وكاميرا CMOS للعمل معًا للتحكم في الجهد والتصحيح التلقائي أثناء التقاط الصور، ويستخدم واجهة USB للتوصيل والتشغيل التي تم تصميمها من أجل مجموعة مسح بصمات الأصابع U.are.U 2000 يؤدي إلى خوارزميات وتطبيقات وواجهات DigitalPersona U.are.U لبصمات الأصابع إلى DigitalPersona Universal Authentication Manager (UAM) - تتضمن هذه التطبيقات المتعلقة ببصمات الأصابع Windows تسجيل الدخول وقفل الشاشة واستبدال كلمة المرور ومحرك الأقراص المشفر.
عند شراء منتجات أجهزة استشعار بصمات الأصابع، عادةً ما يقوم التجار بتضمين برامج تشغيل الأجهزة وأدلة المنتجات ومجموعات التطوير الثانوية وأمثلة برامج التطوير. من خلال مجموعة تطوير البرامج (SDK)، يمكن إضافة وظيفة التعرف على بصمات الأصابع إلى التطبيق.
3. التقنيات الرئيسية في عملية التطوير الثانوية لماسحات بصمات الأصابع
استدعاء 1.dll
أولاً، دعنا نقدم طريقة استدعاء ملف dll في مجموعة تطوير مستشعر بصمات الأصابع في delpi. ضع uruShell.dll في حزمة التطوير في دليل البرنامج أو دليل النظام. من أجل الوضوح، تتركز عبارات استدعاء DLL في وحدة برنامج Shelluru.pas، حيث يتم تصدير وظائف uruShell.dll ويتم إنشاء البيانات المرجعية ذات الصلة، ويكون كود المصدر المحدد كما يلي:
وحدة شيلورو؛
واجهة
يستخدم النوافذ والرسائل.
ثابت
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 = صفيف[1..MAX_REGISTER_COUNT] من المؤشر؛
///uru_Init يقوم بتهيئة معلمات مستشعر بصمات الأصابع: يقوم numOfDev بإرجاع عدد أجهزة استشعار بصمات الأصابع المتصلة بالكمبيوتر؛
وظيفة uru_Init(var numOfDev, FeaturesLen: integer): stdcall;
///uru_Connect يتصل بمستشعر بصمة محدد. المعلمة: الجهازلا يوجد رقم مستشعر بصمة الإصبع.
وظيفة uru_Connect (رقم الجهاز: عدد صحيح): عدد صحيح؛
///uru_Terminate ينقطع الاتصال بمستشعر بصمة الإصبع. المعلمة: الجهازلا يوجد رقم مستشعر بصمة الإصبع.
الإجراء uru_Terminate(DeviceNo: integer);
///uru_AllocFeature يعين عنوان بيانات بصمة الإصبع. المعلمات: تم إرجاع مؤشر العنوان بواسطة الميزة.
الإجراء uru_AllocFeature(ميزة var: المؤشر stdcall);
///uru_FreeFeature يحرر العنوان المخصص. المعلمات: تم إرجاع مؤشر العنوان بواسطة الميزة.
الإجراء uru_FreeFeature(ميزة var: المؤشر stdcall);
///uru_GetImageWidth يحصل على عرض صورة بصمة الإصبع.
وظيفة uru_GetImageWidth: عدد صحيح؛
///uru_GetImageHeight يحصل على ارتفاع صورة بصمة الإصبع.
وظيفة uru_GetImageHeight: عدد صحيح؛
///uru_Register وظيفة تسجيل بصمات الأصابع. المعلمات: مقبض نافذة hwnd، يستخدم لنقل الرسائل؛
///fngCount عدد مرات تسجيل بصمة الإصبع؛ مؤشر اتصال صورة بصمة الإصبع؛
وظيفة uru_Register(hwnd: HWND; DeviceNo, fngCount: integer;Pixels: PRegisterPixels; الميزات: المؤشر): stdcall;
///uru_AcquireFeatures وظيفة التحقق من بصمات الأصابع. المعلمات: مقبض نافذة hwnd، يستخدم لنقل الرسائل؛ لا يوجد رقم مستشعر بصمة الإصبع.
وظيفة uru_AcquireFeatures(hwnd: HWND; رقم الجهاز: عدد صحيح؛ البكسلات، الميزات: المؤشر): عدد صحيح؛
///uru_verifyFeatures وظيفة مقارنة بصمات الأصابع. المعلمات: يحتاج srcFeatures إلى مقارنة بيانات بصمات الأصابع؛ ويحتاج dstFeatures إلى مقارنة بيانات بصمات الأصابع.
وظيفة uru_verifyFeatures(srcFeatures, dstFeatures: pointer): Boolean;
///وظيفة التسجيل في ملف dll
الإجراء uru_DllRegister؛
/// مقاطعة وظيفة التصوير المحددة لمستشعر بصمة الإصبع. المعلمة: الجهازلا يوجد رقم مستشعر بصمة الإصبع.
الإجراء uru_StopGetImage(DeviceNO:Integer);Stdcall;
تطبيق
ثابت
DLLNAME= 'uruShell.dll';
{ما يلي هو إعلان استدعاء الوظيفة المصدرة لـ uruShell.dll}
وظيفة uru_Init الخارجية.
وظيفة 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);
فار
أنا: عدد صحيح؛
يبدأ
إذا UserList.Selected = لا شيء ثم
يبدأ
messageBox(application.Handle, 'يرجى تحديد المستخدم أولاً!', nil, MB_OK);
مخرج؛
نهاية؛
إذا UserList.Selected.Data <> لا شيء ثم
الميزة: = ملف UserList.Selected.Data://الميزة فارغة في هذا الوقت
آخر
uru_AllocFeature(Feature);
إذا كانت الميزة = لا شيء، فملف://إذا كانت ميزة بصمة الإصبع فارغة
يبدأ
Status.SimpleText := 'لا يمكن تخصيص ذاكرة الميزات';
مخرج؛
نهاية؛
لأني := 1 إلى 4 افعل
يبدأ
fillChar(Pixels[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
الصور[i].تحديث؛
نهاية؛
Status.SimpleText := 'بدء التسجيل' + UserList.Selected.Caption + 'Fingerprint...';
إذا uru_Register(Handle, DeviceNo, 4,Pixels, Features) = FT_OK إذن
يبدأ
Status.SimpleText := UserList.Selected.Caption + ': التسجيل ناجح!';
إذا UserList.Selected.Data = لا شيء إذن
UserList.Selected.Data := الميزة؛
نهاية
آخر
يبدأ
إذا UserList.Selected.Data = nil ثم uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': فشل التسجيل!';
نهاية؛
نهاية؛
تستدعي هذه الوظيفة بشكل أساسي وظيفة uru_Register في DLL لتسجيل بصمات الأصابع للمستخدمين. تسجيل بصمات الأصابع هو استخراج القيمة المميزة لبصمة الإصبع، وتخصيص أحد طرفي الذاكرة للقيمة المميزة لتخزين بيانات القيمة المميزة لبصمة الإصبع، واستخدام المؤشر. أشر إلى هذه الذاكرة حتى يمكن استرجاعها في المستقبل. بعد الانتهاء من التسجيل يجب إجراء عملية التحقق على الفور للتأكد من صحة البيانات، وتكون عملية التحقق كما يلي:
الإجراء TForm1.BtnVerifyClick(Sender: TObject file://verificationprint);
فار
الميزة: المؤشر؛
ط: عدد صحيح؛
مسار الإصبع: سلسلة؛
يبدأ
Fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;// مسار تخزين بيانات بصمة الإصبع
إذا UserList.Selected = لا شيء ثم
يبدأ
messageBox(Application.Handle, 'يرجى تحديد المستخدم أولاً!', nil, MB_OK);
مخرج؛
نهاية؛
إذا UserList.Selected.Data = لا شيء إذن
يبدأ
messageBox(Application.Handle, PChar(Format('المستخدم %s لم يسجل بصمة الإصبع بعد، يرجى التسجيل أولاً!', [UserList.Selected.Caption]))), nil, MB_OK);
مخرج؛
نهاية؛
fillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
الصور[5].تحديث؛
Status.SimpleText := 'بدء التحقق' + UserList.Selected.Caption + 'Fingerprint...';
الميزة: = ملف UserList.Selected.Data://يجب مقارنة بيانات بصمات الأصابع
move(Feature^,byt,len); file://انقل مقطعًا في الذاكرة بطول len، وانقل البيانات بدءًا من الميزة إلى مصفوفة البايت
uru_AllocFeature(aFeature);// تعيين عنوان بيانات بصمة الإصبع
إذا (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) وuru_verifyFeatures(@byt, aFeature) ثم
ملف://uru_AcquireFeaturesFingerprint التحقق
file://uru_verifyFeaturesمقارنة بصمات الأصابع
يبدأ
Status.SimpleText := UserList.Selected.Caption + ': تم التحقق بنجاح!';
AssignFile(F,fingerpath);//تعيين ملف
ReWrite(F);// أعد كتابة الملف
لأني:=0 لين القيام به
Write(F,byt[i]);//اكتب بيانات مستشعر بصمات الأصابع إلى الملف
CloseFile(F);// أغلق الملف
نهاية
آخر
Status.SimpleText := UserList.Selected.Caption + ': فشل التحقق!';
uru_FreeFeature(aFeature); ملف://تحرير الذاكرة
نهاية؛
مفتاح العملية المذكورة أعلاه هو حفظ بيانات بصمة الإصبع الموجودة في الذاكرة على الفور في ملف بيانات بعد نجاح التحقق من بصمة الإصبع، ويفضل أن يكون اسم ملف البيانات هو اسم المستخدم بالإضافة إلى رقم، بحيث يمكن الحصول على بيانات بصمة المستخدم المقابلة بسهولة تم العثور عليها أثناء التحقق اللاحق. وأخيرًا، تذكر تحرير الذاكرة المخصصة مؤقتًا. قم بتخزين بيانات بصمة الإصبع في ملف، ويمكنك بعد ذلك فتح الملف لاسترداد ملف البيانات وإجراء عملية مطابقة مع المستخدم الحالي للتحقق من الهوية الصحيحة للمستخدم، وتكون العملية المحددة كما يلي:
الإجراء TForm1.BitBtn2Click(Sender: TObject file://Verify بصمة المستخدم القديمة).
فار
الميزة 1: المؤشر؛
ط: عدد صحيح؛
يبدأ
إذا OpenDialog1.Execute بعد ذلك
يبدأ
AssignFile(G,OpenDialog1.FileName);//حدد الملف
إعادة تعيين (G)؛ // إعادة تعيين الملف
لأني:=0 لين القيام به
قراءة (G، byt2 [i])؛ // انقل بيانات مستشعر بصمات الأصابع في الملف إلى صفيف byte2
CloseFile(G);// أغلق الملف
نهاية؛
fillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
الصور[5].تحديث؛
Status.SimpleText := 'بدء التحقق' + UserList.Selected.Caption + 'Fingerprint...';
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); ملف://تحرير الذاكرة
نهاية؛
في الواقع، يمكن أيضًا تخزين بيانات بصمات الأصابع في قاعدة بيانات، بحيث يمكن تنفيذ نظام هيكل متعدد الطبقات، ويتم الوصول إليها مركزيًا في قاعدة البيانات الموجودة على الخادم، أو يقوم العميل بتحميل بيانات التسجيل إلى الخادم حسب الحاجة يقرأها من الخادم عندما يحتاج المستخدمون القدامى إلى التحقق من البيانات، مما يضمن الأمان.
4. ملخص
تقدم هذه المقالة استخدام U.are.U 2000 تم تطوير مجموعة التطوير الخاصة بمستشعر بصمة الإصبع للتطوير الثانوي لتنفيذ عملية تسجيل بيانات بصمات الأصابع والتحقق منها وتخزين البيانات وإعادة التحقق من بصمات الأصابع القديمة، ويمكن استخدام هذه العملية في بعض الأنظمة التي تحتاج إلى التعرف على الهويات الشخصية من خلال بصمات الأصابع. قام المؤلف بتطويره على هذا الأساس، وتم تطوير نموذج أولي لنظام إدارة تصريح الإقامة المؤقتة لوكالات الأمن العام أو المجتمعات السكنية، والذي يحقق بشكل أساسي وظيفة إدارة تصريح الإقامة المؤقتة للمستخدم تقدم هذه المقالة فقط طريقة استدعاء DLL في حزمة تطوير مستشعر بصمات الأصابع والعمليات الرئيسية للتسجيل والتحقق في التطوير الثانوي جهاز بصمة، لأنه بسيط نسبيًا، لذلك لا توجد مناقشة متعمقة يمكن للقراء تطويره بأنفسهم بناءً على الوظائف التي يوفرها ملف dll. مرحبا بكم في الكتابة لي للمناقشة، بريدي الإلكتروني هو [email protected]