From 2f3941d16c429f5261d53d096ad10cd63ca3ce55 Mon Sep 17 00:00:00 2001 From: Connor O'Shea Date: Wed, 22 Feb 2017 23:01:00 -0500 Subject: [PATCH] Enhanced compatibility with input posted from a web browser (which tends to remove/replace the whitespace characters we need for parsing) --- IdParser.Client/Main.cs | 1 - IdParser.Tests/DriversLicenseTests.cs | 30 +++++++++++++++ IdParser.sln | 54 +++------------------------ IdParser/IdParser.cs | 18 ++++++++- IdParser/IdParser.csproj | 8 ++++ IdParser/IdParser.nuspec | 6 +-- 6 files changed, 63 insertions(+), 54 deletions(-) diff --git a/IdParser.Client/Main.cs b/IdParser.Client/Main.cs index eccbc02..dc3afa5 100644 --- a/IdParser.Client/Main.cs +++ b/IdParser.Client/Main.cs @@ -200,7 +200,6 @@ private void Main_Load(object sender, EventArgs e) { private void btnParse_Click(object sender, EventArgs e) { if (txtHidData.Text.Contains("@")) { - File.WriteAllText(@"C:\users\connor\desktop\parsedsdf.txt", txtHidData.Text); ParseScanData(txtHidData.Text); } else { diff --git a/IdParser.Tests/DriversLicenseTests.cs b/IdParser.Tests/DriversLicenseTests.cs index b18f12b..34dc76c 100644 --- a/IdParser.Tests/DriversLicenseTests.cs +++ b/IdParser.Tests/DriversLicenseTests.cs @@ -183,6 +183,36 @@ public void TestCTLicense() { } } + [TestMethod] + public void TestCTLicenseWebBrowser() { + var barcode = @"@ +AAMVA6360060101DL00290179DAACTLIC,ADULT,A +DAG60 STATE ST +DAIWETHERSFIELD +DAJCT +DAK061091896 +DAQ990000001 +DARD +DASB +DAT +DBA20150101 +DBB19610101 +DBC2 +DBD20090223 +DAU506 +DAYBLU +DBF00 +DBHY"; + + var idCard = IdParser.Parse(barcode, Validation.None); + + Assert.IsNotNull(idCard); + Assert.AreEqual("ADULT", idCard.FirstName); + Assert.AreEqual("60 STATE ST", idCard.StreetLine1); + Assert.AreEqual("CT", idCard.JurisdictionCode); + Assert.AreEqual(new DateTime(1961, 01, 01), idCard.DateOfBirth); + } + [TestMethod] public void TestNonStandardDataElementSeparator() { var file = File.ReadAllText("MA License Piped.txt"); diff --git a/IdParser.sln b/IdParser.sln index f9842f7..cb816d1 100644 --- a/IdParser.sln +++ b/IdParser.sln @@ -9,108 +9,64 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdParser.Tests", "IdParser. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdParser.Client", "IdParser.Client\IdParser.Client.csproj", "{FA949E77-9931-476C-BF93-DE61F5290CE7}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F2E20BF1-CDBC-4A70-A551-F017A0FC6D3F}" + ProjectSection(SolutionItems) = preProject + IdParser\IdParser.nuspec = IdParser\IdParser.nuspec + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 ReleaseNET20|Any CPU = ReleaseNET20|Any CPU - ReleaseNET20|x86 = ReleaseNET20|x86 ReleaseNET35|Any CPU = ReleaseNET35|Any CPU - ReleaseNET35|x86 = ReleaseNET35|x86 ReleaseNET40|Any CPU = ReleaseNET40|Any CPU - ReleaseNET40|x86 = ReleaseNET40|x86 ReleaseNET45|Any CPU = ReleaseNET45|Any CPU - ReleaseNET45|x86 = ReleaseNET45|x86 ReleaseNET46|Any CPU = ReleaseNET46|Any CPU - ReleaseNET46|x86 = ReleaseNET46|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Debug|Any CPU.Build.0 = Debug|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Debug|x86.ActiveCfg = Debug|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Debug|x86.Build.0 = Debug|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Release|Any CPU.ActiveCfg = Release|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Release|Any CPU.Build.0 = Release|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Release|x86.ActiveCfg = Release|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.Release|x86.Build.0 = Release|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET20|Any CPU.ActiveCfg = ReleaseNET20|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET20|Any CPU.Build.0 = ReleaseNET20|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET20|x86.ActiveCfg = ReleaseNET20|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET20|x86.Build.0 = ReleaseNET20|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET35|Any CPU.ActiveCfg = ReleaseNET35|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET35|Any CPU.Build.0 = ReleaseNET35|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET35|x86.ActiveCfg = ReleaseNET35|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET35|x86.Build.0 = ReleaseNET35|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET40|Any CPU.ActiveCfg = ReleaseNET40|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET40|Any CPU.Build.0 = ReleaseNET40|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET40|x86.ActiveCfg = ReleaseNET40|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET40|x86.Build.0 = ReleaseNET40|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET45|Any CPU.ActiveCfg = ReleaseNET45|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET45|Any CPU.Build.0 = ReleaseNET45|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET45|x86.ActiveCfg = ReleaseNET45|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET45|x86.Build.0 = ReleaseNET45|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET46|Any CPU.ActiveCfg = ReleaseNET46|Any CPU {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET46|Any CPU.Build.0 = ReleaseNET46|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET46|x86.ActiveCfg = ReleaseNET46|Any CPU - {342DBA23-D9AD-4A5F-91B9-EBB08107C903}.ReleaseNET46|x86.Build.0 = ReleaseNET46|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Debug|x86.ActiveCfg = Debug|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Debug|x86.Build.0 = Debug|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Release|Any CPU.Build.0 = Release|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Release|x86.ActiveCfg = Release|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.Release|x86.Build.0 = Release|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET20|Any CPU.ActiveCfg = ReleaseNET20|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET20|Any CPU.Build.0 = ReleaseNET20|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET20|x86.ActiveCfg = ReleaseNET20|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET20|x86.Build.0 = ReleaseNET20|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET35|Any CPU.ActiveCfg = ReleaseNET35|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET35|Any CPU.Build.0 = ReleaseNET35|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET35|x86.ActiveCfg = ReleaseNET35|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET35|x86.Build.0 = ReleaseNET35|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET40|Any CPU.ActiveCfg = ReleaseNET40|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET40|Any CPU.Build.0 = ReleaseNET40|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET40|x86.ActiveCfg = ReleaseNET40|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET40|x86.Build.0 = ReleaseNET40|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET45|Any CPU.ActiveCfg = ReleaseNET45|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET45|Any CPU.Build.0 = ReleaseNET45|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET45|x86.ActiveCfg = ReleaseNET45|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET45|x86.Build.0 = ReleaseNET45|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET46|Any CPU.ActiveCfg = ReleaseNET46|Any CPU {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET46|Any CPU.Build.0 = ReleaseNET46|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET46|x86.ActiveCfg = ReleaseNET46|Any CPU - {8F0FFE69-6B8E-43AD-9E86-B2195ABE8A3D}.ReleaseNET46|x86.Build.0 = ReleaseNET46|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.Debug|x86.ActiveCfg = Debug|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.Debug|x86.Build.0 = Debug|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.Release|Any CPU.Build.0 = Release|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.Release|x86.ActiveCfg = Release|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.Release|x86.Build.0 = Release|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET20|Any CPU.ActiveCfg = ReleaseNET20|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET20|Any CPU.Build.0 = ReleaseNET20|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET20|x86.ActiveCfg = ReleaseNET20|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET20|x86.Build.0 = ReleaseNET20|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET35|Any CPU.ActiveCfg = ReleaseNET35|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET35|Any CPU.Build.0 = ReleaseNET35|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET35|x86.ActiveCfg = ReleaseNET35|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET35|x86.Build.0 = ReleaseNET35|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET40|Any CPU.ActiveCfg = ReleaseNET40|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET40|Any CPU.Build.0 = ReleaseNET40|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET40|x86.ActiveCfg = ReleaseNET40|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET40|x86.Build.0 = ReleaseNET40|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET45|Any CPU.ActiveCfg = ReleaseNET45|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET45|Any CPU.Build.0 = ReleaseNET45|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET45|x86.ActiveCfg = ReleaseNET45|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET45|x86.Build.0 = ReleaseNET45|x86 {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET46|Any CPU.ActiveCfg = ReleaseNET46|Any CPU {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET46|Any CPU.Build.0 = ReleaseNET46|Any CPU - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET46|x86.ActiveCfg = ReleaseNET46|x86 - {FA949E77-9931-476C-BF93-DE61F5290CE7}.ReleaseNET46|x86.Build.0 = ReleaseNET46|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IdParser/IdParser.cs b/IdParser/IdParser.cs index e72509b..b2bb106 100644 --- a/IdParser/IdParser.cs +++ b/IdParser/IdParser.cs @@ -51,7 +51,9 @@ public static IdentificationCard Parse(string rawPdf417Input, Validation validat if (validationLevel == Validation.Strict) { ValidateFormat(rawPdf417Input); } - else { + else + { + rawPdf417Input = FixIncorrectHeader(rawPdf417Input); rawPdf417Input = RemoveIncorrectCarriageReturns(rawPdf417Input); } @@ -108,6 +110,20 @@ private static string RemoveIncorrectCarriageReturns(string input) { return input; } + private static string FixIncorrectHeader(string input) + { + if (input[0] == '@' && + input[1] == ExpectedCarriageReturn && + input[2] == ExpectedLineFeed && + input[3] == ExpectedRecordSeparator && + input[4] == 'A') + { + return input.Insert(4, ExpectedCarriageReturn.ToString() + ExpectedLineFeed); + } + + return input; + } + /// /// Gets the AAMVA version of the input. /// diff --git a/IdParser/IdParser.csproj b/IdParser/IdParser.csproj index 3e0d84a..2d6d88b 100644 --- a/IdParser/IdParser.csproj +++ b/IdParser/IdParser.csproj @@ -11,6 +11,7 @@ IdParser v4.5.1 512 + bin\Debug\IdParser.XML true @@ -20,6 +21,7 @@ DEBUG;TRACE prompt 4 + bin\Debug\IdParser.XML full @@ -29,12 +31,14 @@ prompt 4 true + bin\Release\IdParser.XML true bin\Release\net20\ v2.0 TRACE;NET20 + bin\Release\net20\IdParser.XML true full AnyCPU @@ -46,6 +50,7 @@ bin\Release\net35\ v3.5 TRACE;NET35 + bin\Release\net35\IdParser.XML true full AnyCPU @@ -57,6 +62,7 @@ bin\Release\net40\ v4.0 TRACE;NET40 + bin\Release\net40\IdParser.XML true full AnyCPU @@ -68,6 +74,7 @@ bin\Release\net45\ v4.5 TRACE;NET45 + bin\Release\net45\IdParser.XML true full AnyCPU @@ -79,6 +86,7 @@ bin\Release\net46\ v4.6 TRACE;NET46 + bin\Release\net46\IdParser.XML true full AnyCPU diff --git a/IdParser/IdParser.nuspec b/IdParser/IdParser.nuspec index 70a7b3f..846aa35 100644 --- a/IdParser/IdParser.nuspec +++ b/IdParser/IdParser.nuspec @@ -2,7 +2,7 @@ IdParser - 2.0.1 + 2.1.0 ID Parser Connor O'Shea Connor O'Shea @@ -11,8 +11,8 @@ https://raw.githubusercontent.com/c0shea/IdParser/master/NuGet%20Package%20Icon.png false Parses AAMVA-compliant driver's licenses and ID cards - Fixed a bug in removing incorrect line endings and added .NET 2.0 assembly to package. - Copyright 2016 + Enhanced compatibility with web browsers. + Copyright 2017 Drivers License Identification Parser PDF417 AAMVA