Jim Lawrence
accessd at shaw.ca
Fri Mar 23 13:26:26 CDT 2007
Hi Marty: Quite an impressive conclusion and solution. The difficult part was to resolve how the value was parsed. The question is why did the writers of the Informix app use that scheme considering that there are time-stamp fields and functions available in the Informix DB as far back as the 1990. Jim -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of MartyConnelly Sent: Thursday, March 22, 2007 6:33 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] OT(kinda): Crack Code I played around with this last night and figured out it was based on some date in 1974 with AM and PM being indicated by last two characters and first 6 as seconds from the start date whatever that is, still it seems a little out as to accuracy Here is some code I used from some old code, you want to switch to Base 36 and omit 0 will alter some counters Const hashFactor As Integer = 37 Const hashLength As Integer = 9 Function HashString(strHash As String) As Double ' Create Hash string for indexing using 'Base 37 Hash Value ' Convert ' spaces punctuation odd chars = 0 ' numeric = 0 - 9 1-10 ' alpha chars a-z A-Z 11-37 ' only use lower case 'such that string "Ab-12" = ' A b - 1 2 ' (11*37^4) + (12*37^3) + (0*37^2) + (2*37^1) + (3*37^0) 'The Hash Length is 9 so it fits a double without precision loss Dim iStrLen As Integer Dim decAsc As Double Dim i As Integer Dim strPad As Integer Dim strToHash As String HashString = 0 ' convert to all lower case strToHash = UCase(strHash) iStrLen = Len(strToHash) 'pad out string to 9 chars with blanks If iStrLen < hashLength Then For strPad = (iStrLen + 1) To hashLength strToHash = strToHash & " " Next Else ' or just grab first nine chars of string If iStrLen > hashLength Then strToHash = Left(strToHash, hashLength) End If End If For i = 1 To hashLength decAsc = Asc(Right(strToHash, i)) 'convert all odd Ascii character values and punctuation to 0 If (decAsc < 48) Or (decAsc >= 58) And (decAsc <= 64) _ Or (decAsc > 91) Then decAsc = 0 Else 'numbers If (decAsc >= 48) And (decAsc <= 57) Then decAsc = decAsc - 47 Else 'letters If (decAsc >= 65) And (decAsc <= 91) Then decAsc = decAsc - 54 ' 54 not 64 as want to start "A" as 11 End If End If End If HashString = HashString + (decAsc * hashFactor ^ (i - 1)) Next End Function Sub unhash() ' H9WDH701 Dim total As Double Dim mydate As Date Dim days As Double total = (2 * 37 ^ 0) Debug.Print total total = total + (0 * 37 ^ 1) Debug.Print total total = total + (7 * 37 ^ 2) Debug.Print total total = total + ((Asc("H") - 54) * 37 ^ 3) Debug.Print total total = total + ((Asc("D") - 54) * 37 ^ 4) Debug.Print total total = total + ((Asc("W") - 54) * 37 ^ 5) Debug.Print total total = total + (9 * 37 ^ 6) Debug.Print total total = total + ((Asc("H") - 54) * 37 ^ 7) Debug.Print total 'mydate = total days = total / (3600# * 24# * 365#) Debug.Print "days=" & days End Sub Sub unhashA() ' H9WDH701 Dim total As Double Dim mydate As Date Dim days As Double total = (2 * 36 ^ 0) Debug.Print total total = total + (0 * 36 ^ 1) Debug.Print total total = total + (7 * 36 ^ 2) Debug.Print total total = total + ((Asc("H") - 55) * 36 ^ 3) Debug.Print total total = total + ((Asc("D") - 55) * 36 ^ 4) Debug.Print total total = total + ((Asc("W") - 55) * 36 ^ 5) Debug.Print total total = total + (9 * 36 ^ 6) Debug.Print total total = total + ((Asc("H") - 55) * 36 ^ 7) Debug.Print total 'mydate = total days = total / (3600# * 24# * 365#) Debug.Print "days=" & days End Sub Sub unhashB() ' H9WDH701 02/06/03 09:19:55 AM 'days=33.1225264776763 ' 12/02/1974 10:45:12 PM Dim total As Double Dim mydate As Date Dim days As Double total = total + (7 * 36 ^ 0) Debug.Print total total = total + ((Asc("H") - 55) * 36 ^ 1) Debug.Print total total = total + ((Asc("D") - 55) * 36 ^ 2) Debug.Print total total = total + ((Asc("W") - 55) * 36 ^ 3) Debug.Print total total = total + (9 * 36 ^ 4) Debug.Print total total = total + ((Asc("H") - 55) * 36 ^ 5) Debug.Print total 'mydate = total days = total / (3600# * 24# * 365#) Debug.Print "days=" & days Debug.Print DateAdd("s", -total, Now) End Sub Sub unhashC() ' H9WLA903=02/06/03 12:08:33 PM '12/02/1974 7:59:40 PM Dim total As Double Dim mydate As Date Dim days As Double total = total + (9 * 36 ^ 0) Debug.Print total total = total + ((Asc("A") - 55) * 36 ^ 1) Debug.Print total total = total + ((Asc("L") - 55) * 36 ^ 2) Debug.Print total total = total + ((Asc("W") - 55) * 36 ^ 3) Debug.Print total total = total + (9 * 36 ^ 4) Debug.Print total total = total + ((Asc("H") - 55) * 36 ^ 5) Debug.Print total 'mydate = total days = total / (3600# * 24# * 365#) Debug.Print "days=" & days Debug.Print DateAdd("s", -total, Now) End Sub Sub test() Dim date1 As Date Dim date2 As Date date1 = #2/6/2003 12:08:33 PM# date2 = #2/6/2003 9:19:55 AM# Debug.Print DateDiff("s", date1, date2) date1 = #12/2/1974 7:59:40 PM# date2 = #12/2/1974 10:45:12 PM# Debug.Print DateDiff("s", date1, date2) End Sub Mark A Matte wrote: > Tha might be what the guy meant by 'shift a bit or 2'. > > I'm running frequency distribution on each char...and 7th char is 0 > everytime except for 2 times out of 500K... > > Thanks for the 'shift' I'll move all calcs over to spaces...and see > what I get. > > Thanks, > > Mark A. Matte > > > >> From: "Gary Kjos" <garykjos at gmail.com> >> Reply-To: Access Developers discussion and problem >> solving<accessd at databaseadvisors.com> >> To: "Access Developers discussion and problem >> solving"<accessd at databaseadvisors.com> >> Subject: Re: [AccessD] OT(kinda): Crack Code >> Date: Thu, 22 Mar 2007 13:57:32 -0500 >> >> If you use that logic and you forget about the rightmost two positions >> - maybe an occurance number or something, you can get close.... >> H = 1027924991 + >> 9 = 15116544 >> W = 1492992 >> D = 16848 >> H = 612 >> 7 = 7 >> --------------------- >> 1044551995 >> >> which translates to Thursday, February 06, 2003 11:19:55 AM >> >> 2 hours off? >> >> I haven't tried it for any others but that one seems pretty scary >> close for the first one I tried. >> >> For example in your first example. H9WDH701 = 02/06/03 09:19:55 = that >> translates to 1044523195 in UNIX time. According to the time >> calculators I googled. >> >> On 3/22/07, Mark A Matte <markamatte at hotmail.com> wrote: >> > Rocky, >> > >> > I've actually made some progress. Last year I learned how to do >> Mayan Math >> > and applied the logic as a counting system not 10 or 20 base...but >> 36...and >> > after learning that this thing is counting seconds since 1/1/70 >> 00:00:00...I >> > assigned values to the numbers and letters. and started running >> some tests. >> > 0=0,1=1,2=2...9=9,A=10,B=11...Z=35. >> > >> > This makes it a 36 base counting system...so you take the value of >> each >> > position...calculate and add like below: >> > >> > 1st ??? >> > 2nd ??? >> > 3rd Value*60466176 >> > 4th Value*1679616 >> > 5th Value*46656 >> > 6th Value*1296 >> > 7th Value*36 >> > 8th Value >> > >> > So if you had 00bfk5t2...you math would be Value of third position >> > ('B'11*60466176) added to each position calculated...so: >> > 0's are 0...('B'11*60466176) >> > +('F'15*1679616)+('K'20*46656)+('5'5*1296)+('T'29*36)+('2'2) >> > >> > Beginning of time for this count is 12/31/69 04:00:00 PM...if you >> do the >> > calcs above you get 691262822...if you add this many seconds to the >> > beginning time you get 11/27/91 9:27:02 AM... >> > >> > Which validates in the system. The guy I talked to that help >> create it over >> > 12 years ago...said he remembered something about haveing to 'shift >> a bit or >> > 2'...but I didn't get much more from him...he just didn't remember the >> > specifics. The 1st and 2nd positions I am having issues with...if >> I try to >> > calculate it out...I get crazy results...and also in the validation >> > tool...with the above example it validated...but if I added a >> > letter(00bfk5t2 changed to 0bbfk5t2)...just added value in second >> > position...it would not accept it as valid??? This is probably >> what he was >> > talking about"Shifting a bit or 2". >> > >> > Anyway...any thoughts? >> > >> > What info would your cousin need? >> > >> > Thanks, >> > >> > Mark A. Matte >> > >> > > -- Marty Connelly Victoria, B.C. Canada -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com