// const crypto = require('crypto'); import * as crypto from 'crypto'; const firstName = 'FLORENTHUGUESJEAN'; const lastName = 'TAVERNIER'; const gender = 'MALE'; const issuer = 'FRA'; const nationality = 'FRA'; const photo = { base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMA///////////////////////////////////////////////////////////////////////////////////////bAEMB///////////////////////////////////////////////////////////////////////////////////////AABEIAUAA8AMBIgACEQEDEQH/xAAXAAEBAQEAAAAAAAAAAAAAAAAAAQID/8QAIRABAQABAwQDAQAAAAAAAAAAAAERAhJhMYGh8CFB0VH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ANmRAXJlFAAAAAAAAAAAEAUQBcmUAXJlAFyIAogCiAKIAqKgCoAoAAACKgKIAAAAAAAAAAAAAAAAAAAqKAgKAigAIADFoN5kZ3MgLupuqANbqu5gB0zBzMg6DE1YbAAAAAAAAAABQQAAFEAAtc7bQW3LIAAAAAAAAALLhAHSVXJqXANhLkAAAAAABQAQFBALcAzqv0wdQAAAAAAAAAAAFBBcICyukuXNZcA2AAAACgIqAAAMar9NuYIAAAAAALhcAyq4XAMmGsAJhcKAmEsaKDCNVkG9N+mnJ0lzAUABUUBFQAAC9HJvV0YAAAFMZBMNyEigAIoKAgoCKigIqKJWHRiiI1prIDqEAAABUAABjV1Zb1MAA1AMNIoAACoCqIAoggAKAAgxW2KCAsB0nQJ0AAAUEBUAGdTC6rmoBG2Z1aBREBcmWcGAayZZUGhAVUyIIZMphcAZXKAKzWkoMrIjpOgKAAACgAIqAxq+mWtXVkFjTMaATKpATItiSAKAKqKKyKgiCpgF5MqmAVKqUEb09HN009AUAAAFAARUBnVPth0vRzoLG2I0AKAiKAigAqKKgAIoCAKAzWmaCRudGI6QAAAAFRQBFARit1kGY0z0aBQBUFAQABUUEAAVFABAGa0n2ISNsxoAAAAFAARUASxQGaLhAFQBUAUBKCjKiKMqKoAAAgDUAgAAAAAKAAigIAAipQQAAAAAEFQFEUUAAAEGmY0AAAAAACgAIqAAAAAyLUABAPkAE+RQEUAFQBQAWKAAAAAAAKAAioAAAADNv0jOfloFEABQEFAQUBAAFlRJfkHQAAAAAAAFQAAAAS3AKl6VjdUttBGpWQGxnKgqoAqACoAAiZAtQAdZ0ipLmKAAAAAAACWyAqZwxdX8QGrq/jAAAAAAAA1KrC5BpEyZBTKZQFQAAAGpq/rIDqrlLY3NQNAAAAxdX8YAAAAAAAAAAAAAAAAAAAAAAAAAFlsdJcuQDsMTV/W5cg4jrsnPvY2Tn3sDkOuyc+9jZOfH4DkOuyc+9jZOfH4DkOuyc+9jZOfewOQ67Jz72Nk597A5DrsnPj8Nk58fgOQ67Jz72Nk597A5DrsnPvY2Tnx+A5DrsnPj8Nk58fgOQ67Jz72Nk597A5DrsnPvY2Tn3sDkOuyc+9jZOfewOQ67Jz4/DZOfH4DkOuyc+Pw2Tn3sDksvy6bJz72Nk597A//Z', height: 320, width: 240, }; const dg1File = { length: 91, mrzInfo: { compositeCheckDigit: '2', dateOfBirth: '000719', dateOfBirthCheckDigit: '1', dateOfExpiry: '291209', dateOfExpiryCheckDigit: '5', documentCode: 'P', documentNumber: '19HA34828', documentNumberCheckDigit: '4', documentType: 3, gender: 'MALE', issuingState: 'FRA', nationality: 'FRA', optionalData1: '<<<<<<<<<<<<<<0', primaryIdentifier: 'TAVERNIER', secondaryIdentifier: 'FLORENT String.fromCharCode(code)).join(''); // console.log('encodedString', encodedString); // const hash = crypto.createHash('sha256'); // hash.update(encodedString); // const hashedEncoded = hash.digest('hex'); // console.log('hashedEncoded', hashedEncoded); // const hash2 = crypto.createHash('sha256'); // hash2.update(Buffer.from(encoded)); // const hashedEncoded2 = hash2.digest('hex'); // console.log('hashedEncoded2', hashedEncoded2); function getEncoded(dg1File: any) { let buffers = []; // helper to write string as ASCII codes const write = (str: string) => { buffers.push(Buffer.from(str, 'utf8')); }; // helper to write '<' filled string of certain length const writeFixedSize = (str: any, size: any) => { str = str.padEnd(size, '<'); buffers.push(Buffer.from(str, 'utf8')); }; const writeDocumentType = () => write(dg1File.mrzInfo.documentCode); const writeIssuingState = () => write(dg1File.mrzInfo.issuingState); const writeDocumentNumber = () => writeFixedSize(dg1File.mrzInfo.documentNumber, 9); const writeDateOfBirth = () => write(dg1File.mrzInfo.dateOfBirth); const writeGender = () => write(dg1File.mrzInfo.gender); const writeDateOfExpiry = () => write(dg1File.mrzInfo.dateOfExpiry); const writeNationality = () => write(dg1File.mrzInfo.nationality); const writeName = () => writeFixedSize( dg1File.mrzInfo.primaryIdentifier + '<<' + dg1File.mrzInfo.secondaryIdentifier, 39, ); if (dg1File.mrzInfo.documentType === 3) { // check if it's an ID3 document writeDocumentType(); writeIssuingState(); writeName(); writeDocumentNumber(); buffers.push( Buffer.from([dg1File.mrzInfo.documentNumberCheckDigit.charCodeAt(0)]), ); // Convert string digit to ASCII code writeNationality(); writeDateOfBirth(); buffers.push( Buffer.from([dg1File.mrzInfo.dateOfBirthCheckDigit.charCodeAt(0)]), ); // Convert string digit to ASCII code writeGender(); writeDateOfExpiry(); buffers.push( Buffer.from([dg1File.mrzInfo.dateOfExpiryCheckDigit.charCodeAt(0)]), ); // Convert string digit to ASCII code // assuming personal number is optionalData1 writeFixedSize(dg1File.mrzInfo.optionalData1, 14); // assuming personal number check digit is missing buffers.push( Buffer.from([dg1File.mrzInfo.compositeCheckDigit.charCodeAt(0)]), ); // Convert string digit to ASCII code } else { console.error('Unsupported document type: ', dg1File.mrzInfo.documentType); } return Buffer.concat(buffers); } const encoded = Array.from(getEncoded(dg1File)); console.log(encoded); const a = [ 80, 70, 82, 65, 84, 65, 86, 69, 82, 78, 73, 69, 82, 60, 60, 70, 76, 79, 82, 69, 78, 84, 60, 72, 85, 71, 85, 69, 83, 60, 74, 69, 65, 78, 60, 60, 60, 60, 60, 60, 60, 60, 60, 49, 57, 72, 65, 51, 52, 56, 50, 56, 4, 70, 82, 65, 48, 48, 48, 55, 49, 57, 1, 77, 65, 76, 69, 50, 57, 49, 50, 48, 57, 5, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 48, 2, ]; console.log('a', a.map(code => String.fromCharCode(code)).join('')); const b = [ 97, 91, 95, 31, 88, 80, 60, 70, 82, 65, 84, 65, 86, 69, 82, 78, 73, 69, 82, 60, 60, 70, 76, 79, 82, 69, 78, 84, 60, 72, 85, 71, 85, 69, 83, 60, 74, 69, 65, 78, 60, 60, 60, 60, 60, 60, 60, 60, 60, 49, 57, 72, 65, 51, 52, 56, 50, 56, 52, 70, 82, 65, 48, 48, 48, 55, 49, 57, 49, 77, 50, 57, 49, 50, 48, 57, 53, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 48, 50, ]; console.log('b', b.map(code => String.fromCharCode(code)).join('')); // PFRATAVERNIER<