MartyConnelly
martyconnelly at shaw.ca
Thu Mar 22 20:32:50 CDT 2007
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