Skip to content

Authenticity Checks

The Document Reader SDK provides numerous checks, representing the advanced security techniques to verify the document's authenticity and prevent its counterfeiting.

See the table with the complete list of all available authenticity checks with their default values, brief descriptions, and links to code snippets and details.

Authenticity check Default value Brief description
LivenessHologram detection true Check of holographic effect and the shape of hologram image.
LivenessElectronic device true Validation of the image, taken from the electronic device's display.
LivenessOVI true Optically Variable Ink objects check.
LivenessMLI true Multiple Laser Images secure printing.
Image patterns true Check of the unique image patterns on the document's laminated layer.
Photo embedding type true Check of the affixed or imprinted photo.
Barcode format true Check of the barcode number, format, and data.
Portrait comparison true Comparing the photo on the document with the portrait from another source.
UV luminescence true Check of the paper and materials in UV light.
Protection fibers true Check of the specific secure fibers in mixture of the document protection material.
Extended MRZ true Thorough and multi-step check of the Machine Readable Zone.
Extended OCR true Thorough and multi-step check of the Optical Character Recognition data.
B900 IR true Infrared check of the text, printed in B900 secure ink.
IR visibility true Comparing representations of the secure elements in infrared and visible light.
IPI text true Visualizing and checking the Invisible Personal Information, applied to the holder's photo.
Axial true Using axial white light to check the material integrity.
LetterScreen false Checking the data of the (ghost) portrait according to the LetterScreen++ technology.

Liveness

Document Liveness Check is a complex set of authenticity verifications, ensuring that the identity document is physically presented. It includes:

During the document processing, the flashlight on your device will be turned on and used by the Document Reader SDK.

Hologram Detection

In this check, the presence of holographic effect and the shape of hologram image are analyzed.

To enable, use the checkHolo parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams = LivenessParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams?.checkHolo = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

RGLLivenessParams *livenessParams = [RGLLivenessParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams.livenessParams = livenessParams;

[RGLDocReader shared].processParams.authenticityParams.livenessParams.checkHolo = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.livenessParams = LivenessParams.defaultParams()

authenticityParams.livenessParams?.checkHolo = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.livenessParams = LivenessParams.defaultParams();

authenticityParams.livenessParams.checkHolo = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.livenessParams.checkHolo = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkHolo: true
    }
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkHolo: true
    }
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkHolo: true
    }
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams = LivenessParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams.CheckHolo = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams = RGLLivenessParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams.CheckHolo = true;

Electronic Device

In this check, the image, captured by the device's camera from the computer's monitor or other external display, is validated.

To enable, use the checkED parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams = LivenessParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams?.checkED = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

RGLLivenessParams *livenessParams = [RGLLivenessParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams.livenessParams = livenessParams;

[RGLDocReader shared].processParams.authenticityParams.livenessParams.checkED = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.livenessParams = LivenessParams.defaultParams()

authenticityParams.livenessParams?.checkED = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.livenessParams = LivenessParams.defaultParams();

authenticityParams.livenessParams.checkED = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.livenessParams.checkED = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkED: true
    }
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkED: true
    }
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkED: true
    }
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams = LivenessParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams.CheckED = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams = RGLLivenessParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams.CheckED = true;

OVI

Optically Variable Ink objects change their color and appearance under different illumination conditions.

To enable, use the checkOVI parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams = LivenessParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams?.checkOVI = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

RGLLivenessParams *livenessParams = [RGLLivenessParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams.livenessParams = livenessParams;

[RGLDocReader shared].processParams.authenticityParams.livenessParams.checkOVI = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.livenessParams = LivenessParams.defaultParams()

authenticityParams.livenessParams?.checkOVI = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.livenessParams = LivenessParams.defaultParams();

authenticityParams.livenessParams?.checkOVI = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.livenessParams.checkOVI = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkOVI: true
    }
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkOVI: true
    }
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkOVI: true
    }
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams = LivenessParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams.CheckOVI = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams = RGLLivenessParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams.CheckOVI = true;

MLI

Multiple Laser Images is the technology of secure printing, resulting in different graphics depending on the viewing angle.

To enable, use the checkMLI parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams = LivenessParams.default()

DocReader.shared.processParams.authenticityParams?.livenessParams?.checkMLI = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

RGLLivenessParams *livenessParams = [RGLLivenessParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams.livenessParams = livenessParams;

[RGLDocReader shared].processParams.authenticityParams.livenessParams.checkMLI = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.livenessParams = LivenessParams.defaultParams()

authenticityParams.livenessParams?.checkMLI = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.livenessParams = LivenessParams.defaultParams();

authenticityParams.livenessParams.checkMLI = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.livenessParams.checkMLI = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkMLI: true
    }
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkMLI: true
    }
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    livenessParams: {
      checkMLI: true
    }
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams = LivenessParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.LivenessParams.CheckMLI = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams = RGLLivenessParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.LivenessParams.CheckMLI = true;

Image Patterns

Many personal documents have the laminated layer with unique image patterns, standing out by their shape, size, and color.

To enable, use the checkImagePatterns parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkImagePatterns = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkImagePatterns = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkImagePatterns = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkImagePatterns = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkImagePatterns = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkImagePatterns: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkImagePatterns: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkImagePatterns: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckImagePatterns = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckImagePatterns = true;

Photo Embedding Type

This check controls the type of embedding the photo (affixed or printed) in the document of concrete type according to the template from the database.

To enable, use the checkPhotoEmbedding parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkPhotoEmbedding = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkPhotoEmbedding = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkPhotoEmbedding = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkPhotoEmbedding = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkPhotoEmbedding = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoEmbedding: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoEmbedding: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoEmbedding: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckPhotoEmbedding = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckPhotoEmbedding = true;

Barcode Format

In this check, the number and type of barcodes for the secure document are validated, together with their structure and encoded data.

To enable, use the checkBarcodeFormat parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkBarcodeFormat = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkBarcodeFormat = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkBarcodeFormat = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkBarcodeFormat = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkBarcodeFormat = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkBarcodeFormat: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkBarcodeFormat: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkBarcodeFormat: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckBarcodeFormat = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckBarcodeFormat = true;

Portrait Comparison

This check compares the photo extracted from the document data page in white light with the portrait from another source. The photos are compared with the help of Regula Face SDK.

To enable, use the checkPhotoComparison parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkPhotoComparison = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkPhotoComparison = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkPhotoComparison = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkPhotoComparison = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkPhotoComparison = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoComparison: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoComparison: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkPhotoComparison: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckPhotoComparison = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckPhotoComparison = true;

UV Luminescence

The security documents are mostly printed on UV dull paper and must not fluoresce under ultraviolet light. Additionally, the verification reveals suspicious unevenness of the materials.

To enable, use the checkUVLuminiscence parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkUVLuminiscence = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkUVLuminiscence = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkUVLuminiscence = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkUVLuminiscence = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkUVLuminiscence = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkUVLuminiscence: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkUVLuminiscence: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkUVLuminiscence: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckUVLuminiscence = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckUVLuminiscence = true;

Protection Fibers in UV

Documents' security paper may contain specific flexible fibers in its mixture. Their size, shape, and luminescent properties under UV lighting can be assessed.

To enable, use the checkFibers parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()    

DocReader.shared.processParams.authenticityParams?.checkFibers = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkFibers = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkFibers = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkFibers = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkFibers = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkFibers: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkFibers: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkFibers: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckFibers = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckFibers = true;

Extended MRZ

This check verifies the size of MRZ lines, their relative position, clues of possible alteration, etc.

To enable, use the checkExtMRZ parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkExtMRZ = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkExtMRZ = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkExtMRZ = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkExtMRZ = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkExtMRZ = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtMRZ: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtMRZ: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtMRZ: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckExtMRZ = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckExtMRZ = true;

Extended OCR

This check controls the quality of personal data printing and positioning.

To enable, use the checkExtOCR parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkExtOCR = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkExtOCR = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkExtOCR = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkExtOCR = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkExtOCR = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtOCR: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtOCR: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkExtOCR: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckExtOCR = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckExtOCR = true;

B900 Ink in IR

The most common ink to use for the MRZ and personal data printing is B900. Infrared lighting reveals the security elements, demonstrating the high contrast level.

To enable, use the checkIRB900 parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkIRB900 = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkIRB900 = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkIRB900 = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkIRB900 = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkIRB900 = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRB900: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRB900: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRB900: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckIRB900 = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckIRB900 = true;

IR Visibility

This check validates the visibility of different elements (especially photo and images) under infrared light and compares to their representations in visible light.

To enable, use the checkIRVisibility parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkIRVisibility = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkIRVisibility = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkIRVisibility = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkIRVisibility = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkIRVisibility = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRVisibility: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRVisibility: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIRVisibility: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckIRVisibility = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckIRVisibility = true;

IPI

This check visualizes the Invisible Personal Information, applied to the holder's photo. In most cases, the hidden data is the document number or the holder's first and last name.

To enable, use the checkIPI parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkIPI = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkIPI = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkIPI = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkIPI = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkIPI = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIPI: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIPI: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkIPI: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckIPI = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckIPI = true;

Axial

This check detects the areas of the laminate film unevenness by applying the illumination scheme with coinciding angles of illumination and observation under visible white light.

To enable, use the checkAxial parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkAxial = true
RGLAuthenticityParams *authenticityParams = [RGLAuthenticityParams defaultParams];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkAxial = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkAxial = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkAxial = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkUVLuminiscence = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkAxial: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkAxial: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkAxial: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckAxial = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckAxial = true;

LetterScreen

Some documents have the secondary (ghost) portrait formed by the wavy lines of the personal data, according to the LetterScreen++ technology.

To enable, use the checkLetterScreen parameter:

DocReader.shared.processParams.authenticityParams = AuthenticityParams.default()

DocReader.shared.processParams.authenticityParams?.checkLetterScreen = true
RGLAuthenticityParams *authenticityParams = [[RGLAuthenticityParams alloc] init];
[RGLDocReader shared].processParams.authenticityParams = authenticityParams;

[RGLDocReader shared].processParams.authenticityParams.checkLetterScreen = @YES;
val authenticityParams = AuthenticityParams.defaultParams()

authenticityParams.checkLetterScreen = true

DocumentReader.Instance().processParams().authenticityParams = authenticityParams
AuthenticityParams authenticityParams = AuthenticityParams.defaultParams();

authenticityParams.checkLetterScreen = true;

DocumentReader.Instance().processParams().authenticityParams = authenticityParams;
DocumentReader.instance.processParams.authenticityParams.checkLetterScreen = true;
DocumentReader.setProcessParams({
  authenticityParams: {
    checkLetterScreen: true
  }
}, _ => { }, _ => { })
DocumentReader.setProcessParams({
  authenticityParams: {
    checkLetterScreen: true
  }
})
DocumentReader.setProcessParams({
  authenticityParams: {
    checkLetterScreen: true
  }
}, function (m) { }, function (e) { })
// Android
DocumentReader.Instance().ProcessParams().AuthenticityParams = AuthenticityParams.DefaultParams();

DocumentReader.Instance().ProcessParams().AuthenticityParams.CheckLetterScreen = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.AuthenticityParams = RGLAuthenticityParams.DefaultParams();

RGLDocReader.Shared.ProcessParams.AuthenticityParams.CheckLetterScreen = true;

Results

After the document processing is finished, the verification outcome is available in the Authenticity Result data structure. For details, see the links below.

Next Steps