التعامل مع قارئ MRZ
#1
السلام عليكم و رحمة الله
صح فطوركم و تقبل الله منا و منكم
هل سبق لأحدكم و أن تعامل مع قارئ MRZ الذي يقرأ الشريط السفلي من بطاقة التعريف البيومترية أو جواز السفر برمجيا بحيث أستخرج رقم البطاقة و الاسم و اللقب ... هل من مساعدة من فضلكم و بارك الله فيكم.
الرد
#2
سلام عليكم ، رمضان كريم
وحدة تتعامل مع MRZ 

كود :
unit PassMRZChk;

interface

implementation

function CheckPassportDigit(const PassportStr: string): byte;
const
  Weight: array [0 .. 2] of byte = (1, 7, 3);
  //
  function GetChrProductXWeight(DigitChr: Char; const Idx: byte): byte;
  begin
    DigitChr := UpCase(DigitChr);
    case DigitChr of
      '<':
        Result := 0;
      '0' .. '9':
        Result := (Ord(DigitChr) - 48);
      'A' .. 'Z':
        Result := (Ord(DigitChr) - 65) + 10;
    else
      Result := 0;
    end;
    Result := Result * Weight[(Idx mod 3)];
  end;

var
  i: byte;
  ProductXWeight: byte;
  Sum: Word;
begin
  Sum := 0;
  if Length(PassportStr) = 0 then
    exit(0);
  for i := 1 to Length(PassportStr) do
  begin
    ProductXWeight := GetChrProductXWeight(PassportStr[i], (i mod 3));
    Sum := Sum + ProductXWeight;
  end;
  Result := (Sum mod 10);
end;

end.
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
[-] كل من 4 users say قال شكرا ل Mr.DOS على المشاركة المفيدة
  • ELARAPY, igidher, Lam.Abdeldjalil, أبو معاذ
الرد
#3
(17-04-2022, 11:47 PM)Mr.DOS كتب : سلام عليكم ، رمضان كريم
وحدة تتعامل مع MRZ 

كود :
unit PassMRZChk;

interface

implementation

function CheckPassportDigit(const PassportStr: string): byte;
const
  Weight: array [0 .. 2] of byte = (1, 7, 3);
  //
  function GetChrProductXWeight(DigitChr: Char; const Idx: byte): byte;
  begin
    DigitChr := UpCase(DigitChr);
    case DigitChr of
      '<':
        Result := 0;
      '0' .. '9':
        Result := (Ord(DigitChr) - 48);
      'A' .. 'Z':
        Result := (Ord(DigitChr) - 65) + 10;
    else
      Result := 0;
    end;
    Result := Result * Weight[(Idx mod 3)];
  end;

var
  i: byte;
  ProductXWeight: byte;
  Sum: Word;
begin
  Sum := 0;
  if Length(PassportStr) = 0 then
    exit(0);
  for i := 1 to Length(PassportStr) do
  begin
    ProductXWeight := GetChrProductXWeight(PassportStr[i], (i mod 3));
    Sum := Sum + ProductXWeight;
  end;
  Result := (Sum mod 10);
end;

end.

يبدو أنك لم تفهمني
أنا أود قراءة MRZ دون اللجوء إلى OutputWedgeSysTray المتواجد في مجلد التنصيب 3M Swipe Reader كما هو مبين في الفيديو ابتداء من الثانية 47 
https://www.youtube.com/watch?v=EqXxNkXIs2o
هل هناك مكون دلفي يتعامل مباشرة مع MRZ كلوحة مفاتيح؟ أرجو أن أكون أوضحت الفكرة
الرد
#4
و عليكم السلام و رحمة الله و بركاته

ليست عندي معلومات عن الجهاز ، لكن عندي بعض الأسئلة
* ما نوع منفذ الجهاز؟ usb/ com
* إذا كان usb  عند فتح محرر النصوص و القراءة دون إستعمال أي اداة هل يكتب النص ؟
إذا كان لا يكتب النص هل sdk الخاص بالجهاز متوفر؟

إذا كان غير متوفر إتصل بالمصنع و أطلب نسخة إذا موجودة أو بعض المساعدة
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم