/// <summary> /// Set the passport holder's nationality. /// </summary> /// <param name="nationality">New nationality.</param> public void setNationality(Country nationality) { this.nationality = nationality; checkDigit(); }
/// <summary> /// Constructs a new MRZ. /// </summary> /// <param name="stream">contains the contents of DG1 (without the tag and length)</param> public MRZInfo(Stream stream) { try { BinaryReader dataIn = new BinaryReader(stream); this.documentType = readDocumentType(dataIn); if (documentType == DOC_TYPE_ID1) { this.issuingState = readIssuingState(dataIn); this.documentNumber = readDocumentNumber(dataIn, 9); this.documentNumberCheckDigit = (char)dataIn.ReadByte(); this.personalNumber = trimFillerChars(readPersonalNumber(dataIn, 14)); // (FIXED by [email protected]) not 15 but 14 let control digit out of this read dataIn.ReadByte(); // MO: always '<'? this.personalNumberCheckDigit = checkDigit(personalNumber); // (Also: [email protected] sugests to: read control digite of sofinumber instead.) this.dateOfBirth = readDateOfBirth(dataIn); this.dateOfBirthCheckDigit = (char)dataIn.ReadByte(); this.gender = readGender(dataIn); this.dateOfExpiry = readDateOfExpiry(dataIn); this.dateOfExpiryCheckDigit = (char)dataIn.ReadByte(); this.nationality = readNationality(dataIn); byte[] optionalData2Bytes = new byte[11]; dataIn.Read(optionalData2Bytes, 0, optionalData2Bytes.Length); this.optionalData2 = UTF8Encoding.UTF8.GetString(optionalData2Bytes); this.compositeCheckDigit = (char)dataIn.ReadByte(); string name = readName(dataIn, 30); processNameIdentifiers(name); } else { /* Assume it's a ID3 document */ this.issuingState = readIssuingState(dataIn); string name = readName(dataIn, 39); processNameIdentifiers(name); this.documentNumber = readDocumentNumber(dataIn, 9); this.documentNumberCheckDigit = (char)dataIn.ReadByte(); this.nationality = readNationality(dataIn); this.dateOfBirth = readDateOfBirth(dataIn); this.dateOfBirthCheckDigit = (char)dataIn.ReadByte(); this.gender = readGender(dataIn); this.dateOfExpiry = readDateOfExpiry(dataIn); this.dateOfExpiryCheckDigit = (char)dataIn.ReadByte(); this.personalNumber = trimFillerChars(readPersonalNumber(dataIn, 14)); this.personalNumberCheckDigit = (char)dataIn.ReadByte(); this.compositeCheckDigit = (char)dataIn.ReadByte(); } } catch (IOException ioe) { Console.WriteLine(ioe.StackTrace); throw new ArgumentException("Invalid MRZ input source"); } }
/// <summary> /// Set the issuing state. /// </summary> /// <param name="issuingState">New issuing state.</param> public void setIssuingState(Country issuingState) { this.issuingState = issuingState; checkDigit(); }
/// <summary> /// Constructs a new MRZ. /// </summary> /// <param name="documentType">document type</param> /// <param name="issuingState">issuing state</param> /// <param name="primaryIdentifier">card holder name</param> /// <param name="secondaryIdentifiers">card holder name</param> /// <param name="documentNumber">document number</param> /// <param name="nationality">nationality</param> /// <param name="dateOfBirth">date of birth</param> /// <param name="gender">gender</param> /// <param name="dateOfExpiry">date of expiry</param> /// <param name="personalNumber">personal number</param> public MRZInfo(int documentType, Country issuingState, string primaryIdentifier, string[] secondaryIdentifiers, string documentNumber, Country nationality, DateTime dateOfBirth, Gender gender, DateTime dateOfExpiry, string personalNumber) { this.documentType = documentType; this.issuingState = issuingState; this.primaryIdentifier = primaryIdentifier; this.secondaryIdentifiers = secondaryIdentifiers; this.documentNumber = documentNumber; this.nationality = nationality; this.dateOfBirth = dateOfBirth; this.gender = gender; this.dateOfExpiry = dateOfExpiry; this.personalNumber = personalNumber; if (documentType == DOC_TYPE_ID1) { this.optionalData2 = "<<<<<<<<<<<"; } checkDigit(); }