public static String[] idScanToStringArray(String sText)
{
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
* idScanToStringArray(1):
* Extracts various information from a string representing a Virginia ID barcode scan.
*
* Author: Ben VanDenburg
* Date: 04 April 2007
* Copyright: 2007 Ben VanDenburg. ALL RIGHTS RESERVED EXCEPT THOSE EXPLICITLY GRANTED.
* You may use this code provided you insert a comment in your code referencing my name
* AND display that part of the program which uses this code has a visual reference
* to my name in an obvious location (like the About box).
*
* Precondition: sText is a string in the non 2D virginia ID barcode format (see below).
* Postcondition: Returns String array in the following format:
* { [0]=>IDNumber,
* [1]=>BirthDateM,
* [2]=>BirthDateD,
* [3]=>BirthDateY,
* [4]=>ExpiryDateM,
* [5]=>ExpiryDateD,
* [6]=>ExpiryDateY,
* [7]=>Age,
* [8]=>Exired }
|* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *|
* Virginia ID barcode format:
* 000000000 0000000000000000
* [ID number][spaces][birthday][expiry]
* [XXXXXXXXX][---][YYYMMDD][YYYYMMDD]
* [123121234][123][12341212][12341212]
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
String sIdNum; //A00-00-0000 format or SSN (000-00-0000)
String sBirthDate; //YYYMMDD
String sExpDate; //YYYMMDD
int iBYear, iBMonth, iBDay; //birthday vars
int iEYear, iEMonth, iEDay; //expiration vars
int iAge; //years
bool bExpired = true; //has the license expired?
//The entire length of the string is 9+3+8+8=12+16=28
// 0 + 9 = [9 + 3] = 12 + 8 = 20 (substrings to take)
sIdNum = sText.Substring(0, 9); //ID number (there are no dashes stored)
sBirthDate = sText.Substring(12, 8);
iBYear = Convert.ToInt32(sBirthDate.Substring(0, 4));//we want these in integer values to make it easier to compute age
iBMonth = Convert.ToInt32(sBirthDate.Substring(4, 2));
iBDay = Convert.ToInt32(sBirthDate.Substring(6));
sExpDate = sText.Substring(20);
iEYear = Convert.ToInt32(sExpDate.Substring(0, 4)); //we need these as ints as well for the same reason as above (how "old" is the expiration date?)
iEMonth = Convert.ToInt32(sExpDate.Substring(4, 2));
iEDay = Convert.ToInt32(sExpDate.Substring(6));
iAge = CurrentAge(iBYear,iBMonth,iBDay); //get age in whole years
if(CurrentAge(iEYear,iEMonth,iEDay) < 0) //is the expiration date in the future (negative age)?
bExpired = false;
String[] sResults = {
Convert.ToString(sIdNum),
Convert.ToString(iBMonth),
Convert.ToString(iBDay),
Convert.ToString(iBYear),
Convert.ToString(iEMonth),
Convert.ToString(iEDay),
Convert.ToString(iEYear),
Convert.ToString(iAge),
Convert.ToString(bExpired)
};//See comment above for human readable explination of this data structure.
return sResults;
}