From aebe300ae2bc39fcb9a67d28f9d21d29a15790d9 Mon Sep 17 00:00:00 2001 From: Connor O'Shea Date: Sun, 3 Jun 2018 23:27:31 -0400 Subject: [PATCH] Remove invalid characters between @ and "AAMVA" for 2000 standard licenses (fix #25) --- IdParser.Test/DriversLicenseTests.cs | 49 ++++++++++++++++++++++++++++ IdParser.Test/IdParser.Test.csproj | 3 ++ IdParser.Test/Invalid Header.txt | 18 ++++++++++ IdParser/Fixes.cs | 15 ++++++--- 4 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 IdParser.Test/Invalid Header.txt diff --git a/IdParser.Test/DriversLicenseTests.cs b/IdParser.Test/DriversLicenseTests.cs index 60949d1..bd9c052 100644 --- a/IdParser.Test/DriversLicenseTests.cs +++ b/IdParser.Test/DriversLicenseTests.cs @@ -2473,5 +2473,54 @@ public void TestLeadingWhitespaceLicense() Assert.AreEqual("02360-1234", idCard.Address.PostalCodeDisplay); Assert.AreEqual("Massachusetts", idCard.IssuerIdentificationNumber.GetDescription()); } + + [TestMethod] + public void TestInvalidHeader() + { + var expected = new DriversLicense + { + Name = new Name + { + First = "MICHAEL", + Middle = "G", + Last = "MOTORIST" + }, + + Address = new Address + { + StreetLine1 = "12 MAIN AVE", + City = "WEST HAVEN", + JurisdictionCode = "CT", + PostalCode = "06516", + Country = Country.Usa + }, + + DateOfBirth = new DateTime(1961, 02, 04), + Sex = Sex.Male, + EyeColor = EyeColor.Brown, + Height = Height.FromImperial(5, 4), + + IdNumber = "025995434", + AamvaVersionNumber = Version.Aamva2000, + + IssueDate = new DateTime(2016, 11, 14), + ExpirationDate = new DateTime(2023, 02, 04), + + IsOrganDonor = true, + Jurisdiction = new DriversLicenseJurisdiction + { + VehicleClass = "D" + } + }; + + var file = File.ReadAllText("Invalid Header.txt"); + var idCard = Barcode.Parse(file, Validation.None); + + AssertIdCard(expected, idCard); + AssertLicense(expected, idCard); + + Assert.AreEqual("06516", idCard.Address.PostalCodeDisplay); + Assert.AreEqual("Connecticut", idCard.IssuerIdentificationNumber.GetDescription()); + } } } diff --git a/IdParser.Test/IdParser.Test.csproj b/IdParser.Test/IdParser.Test.csproj index d3bad63..27ae91b 100644 --- a/IdParser.Test/IdParser.Test.csproj +++ b/IdParser.Test/IdParser.Test.csproj @@ -80,6 +80,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/IdParser.Test/Invalid Header.txt b/IdParser.Test/Invalid Header.txt new file mode 100644 index 0000000..bd78558 --- /dev/null +++ b/IdParser.Test/Invalid Header.txt @@ -0,0 +1,18 @@ +@ +6AAMVA6360060101DL00290179DAAMOTORIST,MICHAEL,G +DAG12 MAIN AVE +DAIWEST HAVEN +DAJCT +DAK06516 +DAQ025995434 +DARD +DAS +DAT +DBA20230204 +DBB19610204 +DBC1 +DBD20161114 +DAU504 +DAYBRO +DBF00 +DBHY \ No newline at end of file diff --git a/IdParser/Fixes.cs b/IdParser/Fixes.cs index 3e1bab4..19f941c 100644 --- a/IdParser/Fixes.cs +++ b/IdParser/Fixes.cs @@ -44,14 +44,21 @@ private static string RemoveInvalidCharactersFromHeader(this string input) return input; } - var ansiPosition = input.IndexOf(Barcode.ExpectedFileType, StringComparison.CurrentCulture); + // AAMVA 2003+ + var ansiPosition = input.IndexOf(Barcode.ExpectedFileType, StringComparison.Ordinal); - if (ansiPosition < 0) + if (ansiPosition >= 0) { - return input; + return Barcode.ExpectedHeader + input.Substring(ansiPosition + Barcode.ExpectedFileType.Length); } - input = Barcode.ExpectedHeader + input.Substring(ansiPosition + Barcode.ExpectedFileType.Length); + // AAMVA 2000 and earlier + var aamvaPosition = input.IndexOf("AAMVA", StringComparison.Ordinal); + + if (aamvaPosition >= 0) + { + return Barcode.ExpectedHeader + input.Substring(aamvaPosition + Barcode.ExpectedFileType.Length); + } return input; }