Skip to content

Instantly share code, notes, and snippets.

@rjmangubat23
Last active September 29, 2021 03:28
Show Gist options
  • Save rjmangubat23/02880bec8cf10da1b4df0cf1ef59e248 to your computer and use it in GitHub Desktop.
Save rjmangubat23/02880bec8cf10da1b4df0cf1ef59e248 to your computer and use it in GitHub Desktop.
Dominican_Republic_ID.java
/*
* Java parser for the MRZ records, as specified by the ICAO organization.
* Copyright (C) 2011 Innovatrics s.r.o.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.idpass.smartscanner.mrz.parser.innovatrics.records.countries;
import org.idpass.smartscanner.mrz.parser.innovatrics.MrzParser;
import org.idpass.smartscanner.mrz.parser.innovatrics.MrzRange;
import org.idpass.smartscanner.mrz.parser.innovatrics.MrzRecord;
import org.idpass.smartscanner.mrz.parser.innovatrics.types.MrzFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Format used for Dominican Republic ID Cards.
* Subset of MrtdTd1 format
*/
public class Dominican_Republic_ID extends MrzRecord {
private static final long serialVersionUID = 1L;
public Dominican_Republic_ID() {
super(MrzFormat.DOMINICAN_REPUBLIC_ID);
}
/**
* Optional data at the discretion
of the issuing State. May contain
an extended document number
as per 6.7, note (j).
*/
public String optional;
/**
* optional (for U.S. passport holders, 21-29 may be corresponding passport number)
*/
public String optional2;
@Override
public void fromMrz(String mrz) {
Logger log = LoggerFactory.getLogger(MrzParser.class);
super.fromMrz(mrz);
final MrzParser p = new MrzParser(mrz);
documentNumber = p.parseString(new MrzRange(5, 17, 0));
validDocumentNumber = p.checkDigit(17, 0, new MrzRange(5, 17, 0), "document number");
optional = p.parseString(new MrzRange(18, 30, 0));
dateOfBirth = p.parseDate(new MrzRange(0, 6, 1));
validDateOfBirth = p.checkDigit(6, 1, new MrzRange(0, 6, 1), "date of birth") && dateOfBirth.isDateValid();
sex = p.parseSex(7, 1);
expirationDate = p.parseDate(new MrzRange(8, 14, 1));
validExpirationDate = p.checkDigit(14, 1, new MrzRange(8, 14, 1), "expiration date") && expirationDate.isDateValid();
nationality = p.parseString(new MrzRange(15, 18, 1));
optional2 = p.parseString(new MrzRange(18, 29, 1));
validComposite = true;
//validComposite = p.checkDigit(29, 1, p.rawValue(new MrzRange(5, 30, 0), new MrzRange(0, 7, 1), new MrzRange(8, 15, 1), new MrzRange(18, 29, 1)), "mrz");
log.debug(p.rawValue(new MrzRange(5, 30, 0), new MrzRange(0, 7, 1), new MrzRange(8, 15, 1), new MrzRange(18, 29, 1)));
setName(p.parseName(new MrzRange(0, 30, 2)));
}
@Override
public String toString() {
return "DOM{" + super.toString() + ", optional=" + optional + ", optional2=" + optional2 + '}';
}
@Override
public String toMrz() {
// first line
final StringBuilder sb = new StringBuilder();
sb.append(code1);
sb.append(code2);
sb.append(MrzParser.toMrz(issuingCountry, 3));
final String dno = MrzParser.toMrz(documentNumber, 9) + MrzParser.computeCheckDigitChar(MrzParser.toMrz(documentNumber, 9)) + MrzParser.toMrz(optional, 15);
sb.append(dno);
sb.append('\n');
// second line
final String dob = dateOfBirth.toMrz() + MrzParser.computeCheckDigitChar(dateOfBirth.toMrz());
sb.append(dob);
sb.append(sex.mrz);
final String ed = expirationDate.toMrz() + MrzParser.computeCheckDigitChar(expirationDate.toMrz());
sb.append(ed);
sb.append(MrzParser.toMrz(nationality, 3));
sb.append(MrzParser.toMrz(optional2, 11));
sb.append(MrzParser.computeCheckDigitChar(dno + dob + ed + MrzParser.toMrz(optional2, 11)));
sb.append('\n');
// third line
sb.append(MrzParser.nameToMrz(surname, givenNames, 30));
sb.append('\n');
return sb.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment