Skip to main content
Skip table of contents

Formats and Configuration


4Finger ID can output the following formats for capture actions:

  1. VERIDFP - Veridium proprietary fingerprint format VeridiumFP.

  2. NIST - ANSI/NIST ITL 1-2007, National Institute of Standards and Technology's Data Format for the Interchange of Fingerprint, Facial, & Other Biometric Information.

  3. Interpol - International Criminal Police Organization INT-I : Interpol’s implementation for I-24/7 secure global police network.

  4. JSON - All prints are contained within a single JSON file which contains Base64 encoded WSQ format images and can be made to contain RAW format images (set the option ExportConfig.setPack_raw_scaled(true);) as well as PNG format images (set the option ExportConfig.setPack_png_scaled(true);. In addition, it can contain an Audit Image (a low resolution, print obscured, version of the captured image) for the purpose of human audit. JSON output also supports writing of multiple scales; 500dpi; 500dpi + 15%, 500dpi - 15%. To enable the multiple scales, apply ExportConfig.setPackExtraScale(true);. The JSON file contains a WSQ image for each fingertip. Each fingertip image is named using the NISTg specification:

    • Finger 1: Right thumb

    • Finger 2: Right index finger

    • Finger 3: Right middle finger

    • Finger 4: Right ring finger

    • Finger 5: Right little finger

    • Finger 6: Left thumb

    • Finger 7: Left index finger

    • Finger 8: Left middle finger

    • Finger 9: Left ring finger

    • Finger 10: Left little finger

  5. ISO2005 - ISO/IEC 19794-4 (2005). Note, this is an image container format.


To configure the use of a specific format use ExportConfig.setFormat(), for example:


Configuring Settings: ExportConfig

The following can be configured by calling set() methods of the ExportConfig class. Import import com.veridiumid.sdk.fourfintegrationexport.ExportConfig;.

Selecting prints to capture


To configure the prints to capture call setFingersToCapture() with an ExportMode. The following modes are available:

  • FOUR_F_LEFT_ENFORCED - all left hand fingers

  • FOUR_F_RIGHT_ENFORCED - all right hand fingers

  • FOUR_F_LEFT_SWITCHABLE - all left hand fingers with a user option to switch

  • FOUR_F_RIGHT_SWITCHABLE - all right hand fingers with a user option to switch

  • EIGHT_F - all left hand fingers followed by right hand fingers

  • TEN_F - all digits, including thumbs

  • TWO_THUMB - both thumbs

Alternatively, an overload of setFingersToCapture takes a list of FingerIDs, for example to capture the right index and thumb:

ExportConfig.setFingersToCapture(Arrays.asList(ExportConfig.FingerID.INDEX_RIGHT, ExportConfig.FingerID.THUMB_RIGHT ));


To configure to capture 4 fingers use the convenience method setHand:

exportConfig.setHand(chosenHand: VeridiumFourFHandChoice)

where VeridiumFourFHandChoice can be:

  • VeridiumFourFHandChoiceForceLeftHandEnroll

  • VeridiumFourFHandChoiceForceRightHandEnroll

  • VeridiumFourFHandChoiceEitherHandEnroll (always left hand first)

  • VeridiumFourFHandChoiceBothHands (always left hand first)

  • VeridiumFourFHandChoiceAllFingers

To configure capture of arbitrary fingers/thumbs call setFingers(). Pass a Set of values between 1 and 10, where:

  • VeridiumFourFFingerChoice.THUMB_RIGHT = 1

  • VeridiumFourFFingerChoice.INDEX_RIGHT = 2

  • VeridiumFourFFingerChoice.MIDDLE_RIGHT = 3

  • VeridiumFourFFingerChoice.RING_RIGHT = 4

  • VeridiumFourFFingerChoice.LITTLE_RIGHT = 5

  • VeridiumFourFFingerChoice.THUMB_LEFT = 6

  • VeridiumFourFFingerChoice.INDEX_LEFT = 7

  • VeridiumFourFFingerChoice.MIDDLE_LEFT = 8

  • VeridiumFourFFingerChoice.RING_LEFT = 9

  • VeridiumFourFFingerChoice.LITTLE_LEFT = 10

For example, to capture left and right thumbs,

let fingers = Set([NSNumber(value: VeridiumFourFFingerChoice.THUMB_RIGHT.rawValue),
                   NSNumber(value: VeridiumFourFFingerChoice.THUMB_LEFT.rawValue)])

Capture Settings

  • Timeout

    Android: ExportConfig.configureTimeout(enabled, time_seconds, allowed_retries, allow_skipping)

    iOS: configureTimeoutEnabled:(BOOL)new_timeout_enabled andTimoutSeconds:(int)new_timeout_time_seconds andAllowedRetries:(NumberOfRetries)new_allowed_retries andAllowSkipping:(BOOL)new_allow_skipping;

    Configure capture timeout behaviour.

    • enabled TRUE implies a capture can time out, FALSE implies cannot.

    • can_restart DEPRECATED Always TRUE. Timeout is applied per capture.

    • time_seconds number of seconds to be allowed for capture before a timeout is triggered

    • allowed_retries restrict the user to a fixed number of retries per capture.

    • allow_skipping BETA FEATUER. When TRUE, if a capture times out it will be skipped and the next capture started. If all captures time out a failure will be returned. Note, templates are output only for successful captures and hence some requested prints might be missing in the ouput. When FALSE any time out event will result in the whole capture process halting and a failure result.

  • Format - Android:ExportConfig.setFormat() iOS:ExportConfig.exportFormat the required output format for capture actions available for 4Finger TouchlessID (See formats for details). This may be any one of:

    -   IBiometricFormats.FORMAT_VERIDFP
    -   IBiometricFormats.FORMAT_NIST
    -   IBiometricFormats.FORMAT_INTERPOL
    -   IBiometricFormats.FORMAT_JSON (Default)
    -   IBiometricFormats.FORMAT_ISO_4_2005
    -   IBiometricFormats.FORMAT_ZIP (for debug purposes only!)

(Format options only apply to capture events. Enrolment and authentication require the VeridiumID proprietary fingerprint format, VERIDFP.)

  • NIST Record Type 4 - Android:ExportConfig.setUseNistType4() iOS:ExportConfig.nist_type Set the NIST output record type to Type-4 (500dpi greyscale images). Applies to the NIST file format only.

    • True

    • False (Default)

  • Optimise For Index Capture - Android:ExportConfig.optimiseForIndex() iOS:ExportConfig.targetIndexFinger optimise capture for optimal image quality on the index finger at the expense of other fingers.

    • True

    • False (Default)

  • Optimise For All Fingers (Two Shot Capture) - Android:ExportConfig.optimiseForIndexLittle() iOS: Set both ExportConfig.targetIndexFinger and ExportConfig.targetLittleFinger. Optimise capture for quality on all fingers by taking two shots in a single capture session.

    • True

    • False (Default)

  • Use liveness - Android:ExportConfig.setUseLiveness() iOS:ExportConfig.useLiveness Switch liveness ON/OFF.

    • True

    • False (Default)

  • Liveness Factor - Android:ExportConfig.setLivenessFactor() iOS:ExportConfig.liveness_factor Adjust the difficulty factor for liveness tests. A higher factor has a higher false rejection rate, but a lower false acceptance rate. (Currently, 80 or below applies standard liveness; a value of 81 or higher enables addition liveness for impressed print overlays).

    • [0,99] (80 Default)

  • Active Liveness - Android:ExportConfig.setActiveLiveness() iOS:ExportConfig.active_liveness Switches active liveness ON/OFF. This feature is currently in beta. A user is required to spread their fingers prior to capture. Liveness must also be turned ON to use this feature.

    • True

    • False (Default)

  • WSQ Compression Ratio - Android:ExportConfig.setWSQCompressionRatio() iOS:ExportConfig.wsq_compression_ratio compression ratio for WSQ file output (for finer control see WSQ Bitrate below). Can be any of the following:

    • WSQCompressRatio.COMPRESS_15to1

    • WSQCompressRatio.COMPRESS_10to1

    • WSQCompressRatio.COMPRESS_5to1

    • WSQCompressRatio.COMPRESS_2to1 (Default)

  • WSQ Bitrate - Android:ExportConfig.setWSQCompressionBitrate() iOS:ExportConfig. bitrate for WSQ file output. Set as a floating point value. Set values are clamped to the range 0.2\<=bitrate\<=6.0. As a general guide, to compute a bitrate from a given compression ratio use the following formula:

    • bitrate = 10/compression ratio

  • Pack WSQ - Android:ExportConfig.setPack_wsq() iOS:ExportConfig.pack_wsq switch output of WSQ on/off (scaled to 500 PPI),

    • True (Default)

    • False

  • Pack RAW - Android:ExportConfig.() iOS:ExportConfig.pack_raw switch output of RAW on/off (scaled to 500 PPI) when using JSON. No codec is required for reading raw images. They are not compressed. Image pixels are stored row-by-row, 1 byte per pixel (8-bit grayscale). Use the image width and height, provided in the JSON output, to correctly reconstruct the image.

    • True (Default)

    • False

  • Pack PNG - Android:ExportConfig.setPack_png() iOS:ExportConfig.pack_png switch output of PNG on/off (scaled to 500 PPI),

    • True

    • False (Default)

  • Pack BMP - Android:ExportConfig.setPack_bmp() iOS:ExportConfig.pack_bmp switch output of BMP on/off (scaled to 500 PPI),

    • True

    • False (Default)

  • Pack Extra scales - JSON - Android:ExportConfig.setPackExtraScale() iOS:ExportConfig.extra_scaled_image switch output of additionally scaled images inside the JSON format on/off (scaled to 500 PPI, +15%, -15%).

    • True (Default)

    • False

  • Pack an Audit Image - JSON - Android:ExportConfig.setPackAuditImage() iOS:ExportConfig.pack_audit_image switch output of an audit image inside the JSON format on/off.

    • True (Default)

    • False

  • Output NFIQ Scores - Android:ExportConfig.setCalculate_NFIQ() iOS:ExportConfig.calculate_nfiq switch output of NFIQ scores on/off when using JSON formats.

    • True

    • False (Default)

    The NFIQ score is an industry standard that produces values between 1 and 5, where 1 = excellent quality, and 5 = very poor quality. Values of 1, 2, or 3 are generally accepted as viable for matching.

  • Pack Dev Output - Android:ExportConfig.setPackDevOutput() iOS:ExportConfig.packDevOutput Switch output of additional information for development purposes. This data is made available in slot 3 of the output data array. Output of this data will slow down processing. See Handling An Operational Result.

    • True

    • False (Default)

  • Fixed Print Width - Android:ExportConfig.setFixedPrintSize(width, height) iOS:ExportConfig.fixed_print_width``ExportConfig.fixed_print_height If this value is set to values greater than 0, then the size of the print is fixed to this size in pixels. Otherwise, it is set to default values. If the fixed size is smaller than the natural size of the print image the edges are cropped away.

    • 0,0 (Default)

    • Any positive integers

For example, to configure output in JSON format on Android, with 15 to 1 compression, with NFIQ score output:

import com.veridiumid.sdk.fourfintegration.ExportConfig;


Agent Capture Mode

4FingerID can be configured to alter the UI and orientation to improve capture of prints by a 2rd party, or agent (as opposed to self capture). Ensure you are invoking a UI fragment designed for agent capture. Agent mode expects users hands to be presented from the right side of the device when held in landscape mode. Thumbs are expected to be presented from the bottom of the device held in portrait mode.

To use agent capture, set the ExportConfig as follows:

Android:ExportConfig.setAgentMode(true); Override fragmentToShow() in your custom 4F activity:

public class CustomFourFActivity extends com.veridiumid.sdk.fourf.FourFBiometricsActivity {
    protected <FourFFragmentInterfaceUnion extends Fragment & FourFUIInterface> FourFFragmentInterfaceUnion fragmentToShow() {
        return (FourFFragmentInterfaceUnion) new FourFAgentUIFragment();

iOS:ExportConfig.agentMode = true;. No other configuration is required.

Audit Image

4FingerID outputs a downscaled version of the image originally captured by the device, with the users prints obscured. This allows for later manual inspection if required such as if you suspect a user of attempting to spoof the system. This feature is currently available when outputting the JSON format, set Android:ExportConfig.setPackAuditImage(true) iOS:ExportConfig.pack_audit_image = true.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.