Ver Mensaje Individual
  #8  
Antiguo 08-02-2007
mdomeyko mdomeyko is offline
Registrado
 
Registrado: sep 2006
Ubicación: Miami, Florida
Posts: 8
Reputación: 0
mdomeyko Va por buen camino
Biometrics U2U DigitalPersona, D6, Firebird; RESUELTO!

OK, Lo resolvi con ayuda de varios. Graciasa ellos. Como resulto tan dificil, aca va mi experiencia de Registro y Verificacion... Suerte!

Para usuarios UrU DigitalPersona usando D6 & Firebird:

Registro de Huella (FingerPrint)

Procedure TfrmRegisterFingerPrint.FPRegisterTemplate1done(Sender: TObject; var pTemplate: OleVariant);
var l_val : OleVariant;
l_pArray : PSafeArray;
i : integer;
fpBuffer : PByteArray;
MS : TMemoryStream;
begin
pTemplate.Export(l_val);
l_pArray := PSafeArray(TVarData(l_val).VArray);
blobSize := l_pArray.rgsabound[0].cElements * l_pArray.cbElements;
fpBuffer := VarArrayLock(l_val);
for i := 0 to blobSize - 1 do
fpData[i] := fpBuffer[i]; // pvData is byte array
VarArrayUnlock(l_val);
mode := 0;
MS := TMemoryStream.Create; { creates stream }
MS.WriteBuffer(fpData, blobsize); { writes stream }
try
t_users.filtered := false; // TIBTable
t_users.filter := 'userid = ' + inttostr(gUserid); // the useer ID to assign the fingerprint
t_users.filtered := true;
t_usersopen;
t_users.edit;
TBlobField(t_users.fieldbyname('FingerPrint')).LoadFromStream(MS); // gets from stream
t_servers.post;
DMLogOn.IBTransac.commit;
except
DMLogOn.IBTransac.Rollback;
end;
t_users.close;
MS.free;
end;
{==============================================================================}

Verifying Huella (FingerPrint)

Procedure TfrmLogOn.FPGetTemplate1done(Sender: TObject; var pTemplate: OleVariant);
var i : integer; pErr : AIErrors;
begin
i := GetFingerID(pTemplate); // returns UserId
if i <> 0 then begin
bbOKClick(nil); // gets in whatever...
end
else if (gUsesFingerPrint) then begin // indicator that system can use fingerprint system
finger_image.Picture := nil; // cleans fingerprint image
FPGetTemplate1.Run(1,pErr); // runs again if fingerprint not found or until manual input...
end;
end;
{==============================================================================}

Function TfrmLogOn.GetFingerID(pTemplate : OleVariant): Integer;
var m_verifyOk : WordBool;
m_score : OleVariant;
m_security : AISecureModeMask;
m_threshold : OleVariant;
m_learning : WordBool;
m_tUnknown : IUnknown;
c_IVerify : ifPVerify;
c_regTemplate : ifPTemplate;
ST : TMemoryStream;
ExistingTemplate: OleVariant;
iCounter: Integer;
begin
m_learning := False;
m_verifyOk := False;
m_tUnknown := CreateComObject(CLASS_FPVerify);
m_tUnknown.QueryInterface(IID_ifPVerify,c_IVerify);
qrefresh(@q_users); // select userid, fingerprint from users.....
ST := TMemoryStream.Create;
Try
While NOT q_users.EOF do begin
ST.Clear;
TBlobField(q_users.FieldByName('FingerPrint')).SaveToStream(ST); // blob field from DB and store in memory stream
ExistingTemplate := MemoryStreamToOleVariant(ST); // convert to olevariant
m_tUnknown := CreateComObject(CLASS_FPTemplate);
m_tUnknown.QueryInterface(IID_ifPTemplate,c_RegTemplate);
c_regTemplate.Import(ExistingTemplate);
c_IVerify.Compare(c_RegTemplate,
pTemplate,
m_verifyOk,
m_score,
m_threshold,
m_learning,
m_security);
if m_verifyOk Then begin
Result := q_users.FieldByName('userid').AsInteger; // returns user ID
VarClear(ExistingTemplate);
Exit;
end;
VarClear(ExistingTemplate);
c_regTemplate := nil;
q_users.Next; // reads next user
end;
Finally;
ST.Free;
VarClear(pTemplate);
if c_regTemplate <> nil Then
c_regTemplate := nil;
c_IVerify := nil;
end;
end;
{==============================================================================}
Responder Con Cita