Finger Print Technology

This is an article about what is lying behind a finger print technology. I'd been made these standard engines since succeded built an attendance enrollment application which stills used until now on University of Gadjah Mada (Civil Engineer Magister Faculty) and Badan Kepegawaian Negara at Yogyakarta district.

The application it self had been built from Borland Delphi 6.0 (BD6) with MySQL as the back-end databases. Even there is no limitation of programming language used, you can write the codes with any compiler you likes. I decided to uses BD6 because I familiar with the IDE (Integrated Developing Environment) since several years developing some applications.

Finger print are not updated technology. It has been used by many developers to create applications such an attended enrollment. Even the FBI built it in order to recorded all the US criminal fingers (click here to read the news).

There are some specifications methode to recognize the prints. Teoritically, i just remember one of them, such bifurfication. It is an angle points representing the print curves. Others documentation related to it you can just find with google.

Okay, getting deeper now. Let's talk about the fingerprint scanner. There is a lot of products available but you still can't buy it from ordinary computer markets. It produced by known brand international names, likes Biometrika. The most famoust product in the world until now is made by DigitalPersona. One of the products from it i used merely known as U.Are.U series using USB port to connected to the computer. I bought it at Computa Yogyakarta. The sales seriously said that the gadget was typically black market since there was no original drivers included in the packages box.

Right below is totally simple code including the globally work flow to develop an attendance system using BD6.

1. Assumed that the U.Are.U drivers had been well set up.

2. Import ActiveX Library from BD6 sub menu Project :: Import Type Library

3. On the available lists, find library entry started with strings “Digital Persona...” (or you can add manually via Add button and select where the driver directory dlls exist). Select them sequentially until all the dlls installed. In the Package Window, press Compile button and confirmed with OK. The components which well installed will shown in BD6 Standard tab.

4. Continue to the form development. You have to create forms which provide 2 modules. A finger registration (using “FPRegisterTemplateX1” component) and verification forms (using “FPVerifyTemplateX1” component).

5. What you have to do in the first module is create a way to opening the scanner port:
and closing the port with command:
Note : you don't have to define the xxx variable since it is some kind of TVariant data type.

6. The data saving triggered after the scanner succesfully read the finger 4 times and it will be executed by FPRegisterTemplateX1Done event. In this procedure, the finger RAW data (iDispatch) have to be exported into OLE (Object Linking Embedded). The OLE it self should be exported again into BlobStream data type so that we can save the pointers data into BLOB type available and flush it into the database (valid with PostgreSQL, MySQL, Oracle and MsAccess):

// your code here
TBlobStream(q1.CreateBlobStream(q1.FieldByName('finger1'), bmWrite)) do
pData := VarArrayLock(xpOle);
Write(pData^, VarArrayHighBound(xpOle, 1) - VarArrayLowBound(xpOle, 1) + 1);

7. Done with the registration module, let's continue with the verification:
The verification module have same methode with previous one by a reverse function.

// generate query code to retrieve data here
with TBlobStream(q1.CreateBlobStream(q1.FieldByName('finger1'), bmRead)) do
test := VarArrayCreate([0, Size + 1], varByte);
pData := VarArrayLock(test);
Read(pData^, Size);
end; // pointer produced
ver:=CoFPTemplate.Create; ver.Import(test); // Export it to OLE

8. After the RAW data prepared, next we have to prompt the fingers. The validation triggered by FPVerifyTemplateX1Done event (watch that you have to add "absensi" procedure manually to saving the attendance processes)

procedure TFUtama.FPVerifyTemplateX1Done(Sender: TObject;
VerifyOk: WordBool; var pInfo: OleVariant; Val: TOleEnum);
if VerifyOk then absensi;

Note : VerifyOK is a standard variable event which telling you that the RAW data from database have equally from scanning results.

That's all secret what is behind the finger print technology. If you want some more detailed information about it, why don't you go to my others site at:


Eko Wahyudiharto
PS: If you've benefit from this blog,
you can support it by making a small contribution.

Enter your email address:

Delivered by FeedBurner

Post a Comment Bookmark and Share


Post a Comment

Leave comments here...