react-native-romanian-eid-sdk
v1.0.0
Published
Romanian eID & Passport NFC Reader SDK for React Native
Downloads
96
Maintainers
Readme
Romanian eID SDK for React Native
Romanian eID & Passport NFC Reader SDK for React Native. Read Romanian electronic identity documents (ePassports and ID cards) using NFC technology.
Features
- ✅ NFC Passport Reading - Read Romanian ePassports using BAC/PACE protocols
- ✅ NFC ID Card Reading - Read Romanian electronic ID cards using PACE
- ✅ MRZ Scanning - Camera-based MRZ (Machine Readable Zone) scanning
- ✅ OCR Scanning - Extract data from old non-NFC ID cards using OCR
- ✅ CSCA Validation - Validate document authenticity with CSCA certificates
- ✅ Biometric Extraction - Extract photos and signatures from documents
- ✅ ICAO 9303 Compliant - Full compliance with international standards
- ✅ License Management - Secure JWT-based license system
- ✅ TypeScript Support - Full TypeScript definitions included
Installation
npm install react-native-romanian-eid-sdk
# or
yarn add react-native-romanian-eid-sdkiOS Setup
- Install CocoaPods dependencies:
cd ios && pod install- Add required capabilities to your
Info.plist:
<!-- NFC Reading -->
<key>NFCReaderUsageDescription</key>
<string>This app needs NFC to read electronic identity documents</string>
<!-- NFC ISO7816 Identifiers -->
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
<string>A000000077030C60000000FE00000500</string>
<string>E828BD080FA000000167454441544100</string>
</array>
<!-- Camera (for MRZ/OCR scanning) -->
<key>NSCameraUsageDescription</key>
<string>This app needs camera access to scan documents</string>Enable NFC capability in Xcode:
- Open your project in Xcode
- Select your target → Signing & Capabilities
- Click "+ Capability" → Near Field Communication Tag Reading
Add the
RomanianEIDSDK.xcframeworkto your project (already included in the pod).
Android Setup
- Add permissions to
AndroidManifest.xml:
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.nfc"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />- TODO for Android developer: Complete the native Android implementation in
android/src/main/java/com/rnromanianeidsdk/RNRomanianEIDSDKModule.java. See inline comments for detailed instructions.
Quick Start
1. Initialize SDK
import EIDReader from 'react-native-romanian-eid-sdk';
// Initialize with your license key
await EIDReader.initialize('YOUR_LICENSE_KEY_JWT');2. Read a Passport
// Scan MRZ first (optional, or enter manually)
const mrzResult = await EIDReader.startMRZScanning();
// Read passport via NFC
const result = await EIDReader.readPassport(mrzResult.mrzKey, {
enableCSCAValidation: true,
timeout: 60,
});
console.log('Name:', result.fullName);
console.log('Document:', result.documentNumber);
console.log('Photo:', result.facialImageBase64); // base64 encoded image3. Read an ID Card
// Read electronic ID card via NFC
const result = await EIDReader.readIDCard(
'123456', // CAN (6 digits)
'1234', // PIN (4-8 digits)
{
enableCSCAValidation: true,
readPhoto: true,
readSignature: true,
timeout: 90,
}
);
console.log('CNP:', result.cnp);
console.log('Name:', result.fullName);
console.log('Address:', result.permanentAddress);4. Scan Old ID Card (OCR)
// For old non-NFC ID cards
const result = await EIDReader.startOCRScanning();
if (result.isReliable) {
console.log('CNP:', result.cnp);
console.log('Name:', result.fullName);
console.log('Confidence:', result.confidence);
} else {
console.warn('Low confidence:', result.validationIssues);
}API Reference
Main Methods
initialize(license: string): Promise<boolean>
Initialize SDK with license key.
await EIDReader.initialize('eyJhbGciOiJIUzI1NiIs...');readPassport(mrzKey: string, options?: PassportReadOptions): Promise<PassportResult>
Read Romanian ePassport via NFC.
Parameters:
mrzKey- MRZ key (format: DocumentNumber+DOB+Expiry with check digits)options- Optional configuration
Options:
{
enableCSCAValidation?: boolean; // Default: true
timeout?: number; // Default: 60 seconds
}Returns: PassportResult with document data and biometrics.
readIDCard(can: string, pin: string, options?: IDCardReadOptions): Promise<IDCardResult>
Read Romanian electronic ID card via NFC.
Parameters:
can- Card Access Number (6 digits printed on card)pin- Personal PIN (4-8 digits)options- Optional configuration
Options:
{
enableCSCAValidation?: boolean; // Default: true
readPhoto?: boolean; // Default: true
readSignature?: boolean; // Default: true
timeout?: number; // Default: 90 seconds
}Returns: IDCardResult with personal data, addresses, and biometrics.
startMRZScanning(): Promise<MRZScanResult>
Open camera to scan MRZ from passport.
Returns: MRZScanResult with parsed MRZ data and mrzKey for NFC reading.
startOCRScanning(): Promise<OCRScanResult>
Open camera to scan old non-NFC ID card using OCR.
Returns: OCRScanResult with extracted data and confidence scores.
isNFCAvailable(): Promise<boolean>
Check if NFC is available and SDK is initialized.
getLicenseInfo(): Promise<LicenseInfo>
Get current license information.
Event Listeners
// Progress updates during NFC reading
const subscription = EIDReader.onReadProgress((event) => {
console.log(`${event.percentage}%: ${event.message}`);
});
// Remember to unsubscribe
subscription.remove();
// or
EIDReader.removeAllListeners();Result Types
PassportResult
{
success: boolean;
documentNumber: string;
fullName: string;
dateOfBirth: string;
nationality: string;
sex: string;
dateOfExpiry: string;
cnp?: string;
placeOfBirth?: string;
residenceAddress?: string;
phoneNumber?: string;
facialImageBase64?: string; // JPEG base64
signatureImageBase64?: string; // PNG base64
cscaValidated: boolean;
cscaCountry?: string;
errorMessage?: string;
}IDCardResult
{
success: boolean;
documentNumber: string;
cnp: string;
fullName: string;
dateOfBirth: string;
sex: string;
dateOfExpiry: string;
issuingAuthority?: string;
placeOfBirth?: string;
citizenship?: string;
permanentAddress?: string;
temporaryAddress?: string;
foreignAddress?: string;
facialImageBase64?: string;
signatureImageBase64?: string;
cscaValidated: boolean;
errorMessage?: string;
}Error Handling
try {
const result = await EIDReader.readPassport(mrzKey);
} catch (error) {
switch (error.code) {
case 'NFC_NOT_AVAILABLE':
console.error('NFC not available on this device');
break;
case 'INVALID_MRZ':
console.error('Invalid MRZ key');
break;
case 'USER_CANCELLED':
console.log('User cancelled the operation');
break;
case 'READ_TIMEOUT':
console.error('Reading timed out');
break;
case 'LICENSE_INVALID':
console.error('Invalid or expired license');
break;
default:
console.error('Error:', error.message);
}
}Example App
A complete example app is included in the example/ directory. To run it:
# Install dependencies
cd example
yarn install
# iOS
cd ios && pod install && cd ..
yarn ios
# Android
yarn androidThe example app demonstrates:
- Passport reading with MRZ scanning
- ID card reading with CAN/PIN input
- OCR scanning for old cards
- License status display
Requirements
iOS
- iOS 15.0 or later
- NFC-capable device (iPhone 7 or later)
- Valid iOS Developer account (for NFC entitlement)
Android
- Android API 21 (Lollipop) or later
- NFC-capable device
- Note: Android implementation needs to be completed (see TODO in source)
License
This SDK is commercial software. A valid license key is required for use.
For licensing information, contact: [email protected]
Support
- Email: [email protected]
- Documentation: Full API Docs
- Issues: GitHub Issues
Security & Privacy
- All NFC communication is encrypted (BAC/PACE protocols)
- No data is sent to external servers
- CSCA validation performed locally
- Biometric data never leaves the device
- License validation done via JWT
Credits
Developed by Up2Date Software
© 2025 Up2Date. All rights reserved.
