I have had a busy week this week, and no time to work on this, sorry :sad.gif:. I'm going to organize this data so it's usable and less confusing.
Proven equations
The equation for uppercase is
X*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
example
the string length of A in AB would be 1 and B would be 0
for string AB I would do
65*31^1+66*31^0=2081
The equation for lowercase is
(X+32)*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
for string ab I would do
(65+32)*31^1+(66+32)*31^0=3105
To decode world seeds
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
Basically, you keep trying letters until the combo equals that of the seed.
for lowercase letters, you would add 32.
Research/Thoughts
The time has come to finally pick apart the world seeds, and create a decoding algorithm. In this thread, I will be listing my finds, my research, everything I can figure out about seeds, and how to reverse engineer them into words if I can figure that out. Eventually, if the time ever comes, I will release a program in the 3rd party minecraft programs section for the purpose of decoding seeds. Leave comments on help with this project!
Please, tell me if this has already been discovered.
What I figured out so far:
To predict 3 letter seeds
Take the keyboard press codes and add 32 to them
After doing this, multiply those codes by 31 to a decreasing exponent of the seeds length.
Add the results to reach the seed for a 3 letter biome.
1 letter seeds are the original keyboard code added by 32.
Minecraft uses the string length of the entered seed as a exponent for the multiplication!
This can be used to predict ANY lowercase seed, before even starting the map.
Now to figure out how to reverse engineer a seed...
Edit: Heres a equation for those who want to try this: (x+32)*31^y
x is the letter character code
y is the string length of the seed, ending at 0
Note! The string length ends at 0. So for string ab, the total length would be 1
To solve this equation, the y gradually receedes from the maximum length as you add more x's
for example, if I wanted to solve a ab seed, I would do
(65+32)*31^1+(66+32)*31^0=3105
Use addition to add additional letters to this
Edit2: Uppercase letters have been solved!
The equation for uppercase is
X*31^y
so for the seed AB, I would do
65*31^1+66*31^0=2081
The final thing now is reverse engineering...
Edit: I'm opening up C# to see if I can figure out any reverse math method using programming.
Edit2: I decided to use a brute method. I'm going to have the program create bigger and bigger possible strings, while guessing the letters of the alphabet in the max amount of orders. I might not be able to finish up till tomorrow though since I need sleep.
This program will take quite a bit.
I'm turning in for the night, I'll work on creating a decoding program for 1-2 hours a day.
I will also continue my research on minecraft seeds, and try to create a hand-written method.
I was unable to stay away from figuring this out. I'm in one of those moods where I just need to solve it. I always get in these moods every once in a while.
I've been thinking and paceing about my house, and I've come up with several theorys.
A minecraft seed can not be solved by a handwritted equation.
A minecraft seed must be solved with a program.
Therefore, by these theorys I discovered, I created some ideas as to what programming is required.
The program must be a brute force program
Since my head currently feels full, I'm just going to dump all of what I'm thinking as to this project.
The program will need to have 2 arrays of both uppercase and lowercase letters.
The program will need to start at a length of 0, and slowly rise. It will need to check every arithmatic combination between the letters all of the letters. So for example,
aa
aA
ab
aB
ect.
This theory of brute forcing the world seed means that the program will indeed take a long time depending on the size of the seed.
Notice: I just noticed that I will probably also have to incorperate numbers, which as a seed end up exactly the same. I may just ignore numbers and generate a string of letters regardless of if the original seed had numbers in it.
I came up with some hand math.
It's very complicated and time consuming without a program, but totally possible.
You basically take the numeric seed you have, and compair it by combinations of numbers.
Heres a example
Say we have this
2081
basically, we will manually test each string of numbers corrosponding with letters.
This manual hand process is massive time consuming, but until I get a working build of the program out, it's it.
Note: Your free to use any of my work so long as you give me credit for the ideas and plans.
So. For the sake of this example, we are only going to test A and B, you would really have to test the whole alphabet including uppercase and lowercase letters, and even numbers!
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
That is the reason I'm creating a brute forcer for this.
Without one, testing every single combination would take you AGES.
Wow, this thread has more information about seeds by now then the minecraft wiki!
EDIT: Even WITH a bruteforcer, it will be next impossible to get the letters in the correct order. The result with probably favor the A and above range, and require you to re-arrange it.
I just finished updating my build of C#, I'm gonna get back to the programming. Wish me luck :wink.gif:.
It's really amazing how the brain works. By now I have completely new programaaming theorys then what I had at 10:00pm. It is now 12:53 AM :tongue.gif:.
Program is looking okay so far, I have single letters down. Now to move on to multi- letters.
Back from a long night of sleeping. I came up with a new method in my sleep that would easily incorperate all of the letters into about 10 lines of code I'd say. I'm going to try it now. I also came up with a double check method in my sleep to put the letters in the correct order.
I'm putting that off to do more research on how minecraft generates seeds with both letters and numbers existing.
With my new research on number + letter algorithms, I found that for 2 letters with one number inbetween, the equation is as follows.
Lets say we were solving for C1D
67*31^2=
68*31^1=
66495
461+60=521
65974
For ever extra scale the letters increase by, you add 30.
I might get back to the programming soon, these number seeds are insanely complicated.
this math and such is wayyyy over my head but i really hope this works out for you cuz im really interested in how worlds actually generate. +1 for you
Well...I'm bored...
I'm gonna try make a program to decode these things in python
No idea how to do it though without brute force, which is a shame
:/
by character code, you mean ASCII right?
but if you do...how can you possibly get a negative world seed?
A combination of characters generates a negative multiplier?
Rollback Post to RevisionRollBack
Just waiting for Forge to officially release for 1.13.x to remove unneeded mobs from 1.13, like Phantoms, from the game because, in my gameplay based opinion, they add nothing of value to the game.
Fun fact: Clicking a bed every 30 minutes doesn't make you a better player, it makes you one who clicks a bed every 30 minutes. Wouldn't you rather just mod them out of the game completely?
no becouse read my last post with the spoiler an integer has a size and that size is(32bit) and when it reaches the max value it continues at minus that number and therefor long seeds have crossed that border many times.
a = 97 but if is the 40th character in the line then its number is 97*31^40! which is insane big. and an integer of 32 bits is +/- 2.147milion and therefore when it reaches the max it continues counting at the bottom (3bit example: 011(3) + 1 = 111(-4) becouse the 1st bit is a sign bit. and add 1 again and u get -3 untill u get to the top again rinse and repeat and there is ur negative number
OHHHH, righto, so we're including the overflow
OK, thanks
I have had a busy week this week, and no time to work on this, sorry :sad.gif:. I'm going to organize this data so it's usable and less confusing.
Proven equations
The equation for uppercase is
X*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
example
the string length of A in AB would be 1 and B would be 0
for string AB I would do
65*31^1+66*31^0=2081
The equation for lowercase is
(X+32)*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
for string ab I would do
(65+32)*31^1+(66+32)*31^0=3105
To decode world seeds
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
Basically, you keep trying letters until the combo equals that of the seed.
for lowercase letters, you would add 32.
Research/Thoughts
The time has come to finally pick apart the world seeds, and create a decoding algorithm. In this thread, I will be listing my finds, my research, everything I can figure out about seeds, and how to reverse engineer them into words if I can figure that out. Eventually, if the time ever comes, I will release a program in the 3rd party minecraft programs section for the purpose of decoding seeds. Leave comments on help with this project!
Please, tell me if this has already been discovered.
What I figured out so far:
To predict 3 letter seeds
Take the keyboard press codes and add 32 to them
After doing this, multiply those codes by 31 to a decreasing exponent of the seeds length.
Add the results to reach the seed for a 3 letter biome.
1 letter seeds are the original keyboard code added by 32.
Minecraft uses the string length of the entered seed as a exponent for the multiplication!
This can be used to predict ANY lowercase seed, before even starting the map.
Now to figure out how to reverse engineer a seed...
Edit: Heres a equation for those who want to try this: (x+32)*31^y
x is the letter character code
y is the string length of the seed, ending at 0
Note! The string length ends at 0. So for string ab, the total length would be 1
To solve this equation, the y gradually receedes from the maximum length as you add more x's
for example, if I wanted to solve a ab seed, I would do
(65+32)*31^1+(66+32)*31^0=3105
Use addition to add additional letters to this
Edit2: Uppercase letters have been solved!
The equation for uppercase is
X*31^y
so for the seed AB, I would do
65*31^1+66*31^0=2081
The final thing now is reverse engineering...
Edit: I'm opening up C# to see if I can figure out any reverse math method using programming.
Edit2: I decided to use a brute method. I'm going to have the program create bigger and bigger possible strings, while guessing the letters of the alphabet in the max amount of orders. I might not be able to finish up till tomorrow though since I need sleep.
This program will take quite a bit.
I'm turning in for the night, I'll work on creating a decoding program for 1-2 hours a day.
I will also continue my research on minecraft seeds, and try to create a hand-written method.
I was unable to stay away from figuring this out. I'm in one of those moods where I just need to solve it. I always get in these moods every once in a while.
I've been thinking and paceing about my house, and I've come up with several theorys.
A minecraft seed can not be solved by a handwritted equation.
A minecraft seed must be solved with a program.
Therefore, by these theorys I discovered, I created some ideas as to what programming is required.
The program must be a brute force program
Since my head currently feels full, I'm just going to dump all of what I'm thinking as to this project.
The program will need to have 2 arrays of both uppercase and lowercase letters.
The program will need to start at a length of 0, and slowly rise. It will need to check every arithmatic combination between the letters all of the letters. So for example,
aa
aA
ab
aB
ect.
This theory of brute forcing the world seed means that the program will indeed take a long time depending on the size of the seed.
Notice: I just noticed that I will probably also have to incorperate numbers, which as a seed end up exactly the same. I may just ignore numbers and generate a string of letters regardless of if the original seed had numbers in it.
I came up with some hand math.
It's very complicated and time consuming without a program, but totally possible.
You basically take the numeric seed you have, and compair it by combinations of numbers.
Heres a example
Say we have this
2081
basically, we will manually test each string of numbers corrosponding with letters.
This manual hand process is massive time consuming, but until I get a working build of the program out, it's it.
Note: Your free to use any of my work so long as you give me credit for the ideas and plans.
So. For the sake of this example, we are only going to test A and B, you would really have to test the whole alphabet including uppercase and lowercase letters, and even numbers!
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
That is the reason I'm creating a brute forcer for this.
Without one, testing every single combination would take you AGES.
Wow, this thread has more information about seeds by now then the minecraft wiki!
EDIT: Even WITH a bruteforcer, it will be next impossible to get the letters in the correct order. The result with probably favor the A and above range, and require you to re-arrange it.
I just finished updating my build of C#, I'm gonna get back to the programming. Wish me luck :wink.gif:.
It's really amazing how the brain works. By now I have completely new programaaming theorys then what I had at 10:00pm. It is now 12:53 AM :tongue.gif:.
Program is looking okay so far, I have single letters down. Now to move on to multi- letters.
Back from a long night of sleeping. I came up with a new method in my sleep that would easily incorperate all of the letters into about 10 lines of code I'd say. I'm going to try it now. I also came up with a double check method in my sleep to put the letters in the correct order.
I'm putting that off to do more research on how minecraft generates seeds with both letters and numbers existing.
With my new research on number + letter algorithms, I found that for 2 letters with one number inbetween, the equation is as follows.
Lets say we were solving for C1D
67*31^2=
68*31^1=
66495
461+60=521
65974
For ever extra scale the letters increase by, you add 30.
I might get back to the programming soon, these number seeds are insanely complicated.
This math seems insanely complex, all Minecraft really does with your text seeds is convert each character into it's decimal code, multiply the codes together, and output the result as a seed which is then fed into the terrain generator process to generate all of the random blocks in the chunks for each biome.
I wonder what Minecraft would do with chinese character encoding as input to the seed generator, as depending on the encoding method, each character could have approximately 103,000 or more different possible representations! :wink.gif:
I found a good world seed. There is a Stronghold close to the spawn along with a NPC Village and a mine shaft. The seed is 6908551075672299095 and then press F3 to find the coardinates. The X and Y pos's for the NPC Village and Mineshaft is X=372 Z=8. Use an Ender Eye to find the Stronghold, when you use the Ender Eye, dig straight down and you'll find the End Portal along with the Stronghold
Even though the algorithm is deterministic, it results in a loss of information. So going backwards with 100% certainty is not possible. For example, 'Ab' and 'BC' should give the same value:
'Ab'
= 65 * 31 + 98
= 2015 + 98
= 2113
'BC'
= 66 * 31 + 67
= 2046 + 67
= 2113
If I was given the seed 2113 to decode, I would go to Wolfram Alpha and type '2113 in base 31'
The full range of alphabetic possibilities are in the spoiler:
Wolfram Alpha gives me '2 6 5'.
For a upper case letter, subtract '2 2'.
For a lower case letter, subtract '3 3'.
If we think it is uc,uc then we need to subtract '2 2 0' and '0 2 2'
'2 6 5'
-'2 2 0'
-'0 2 2'
= '0 2 3' = BC
If we think it is uc,lc then we need to subtract '2 2 0' and '0 3 3'
'2 6 5'
-'2 2 0'
-'0 3 3'
= '0 1 2' = Ab
If we think it is lc,lc then we need to subtract '3 3 0' and '0 3 3'
'2 6 5'
-'3 3 0'
-'0 3 3'
= '-31 0 2' = invalid
If we think it is lc,uc then we need to subtract '3 3 0' and '0 2 2'
'2 6 5'
-'3 3 0'
-'0 2 2'
= '-31 1 3' = invalid
That method should work a lot better than what you were trying to do.
It seems like there could potentially be tons of different letter seeds which correspond to a certain number seed, so I don't think brute force is the way to go.
With the way you described how it works, it seems like each number should be generatable, even if you don't overflow.
You could assume that the number didn't overflow at all, or if it's negative, assume that it only overflowed once, and then try to decode it from there.
Of course, you probably know more about this subject than I do, and there could be something I overlooked.
Okay, I only skimmed through this (sorry) but I don't understand the application of this. By converting the letters into numbers, how can this be used? Doesn't the game already display the numerical seed value when you press F3 in-game?
Okay, I only skimmed through this (sorry) but I don't understand the application of this. By converting the letters into numbers, how can this be used? Doesn't the game already display the numerical seed value when you press F3 in-game?
No, the point is trying to convert the number into a letter/ascii representation of it.
Unfortunately, there are almost infinite codes for each seed, so you can't tell exactly which one was used.
Still, you could assume that they used something, put the seed through a program which gives several possible decodings, and then freak someone out.
No, the point is trying to convert the number into a letter/ascii representation of it.
Unfortunately, there are almost infinite codes for each seed, so you can't tell exactly which one was used.
That's not true.
Assuming that the ascii (string) version of the seed is less than about 12 characters, then no overflow occurred, and there is at most 4^n possible alphanumeric strings that match. (where n is the number of characters in the original ascii seed.)
If you assume the seed is made of upper/lower case letters, then the maximum is 2^n different strings.
If you know in advance the string is all lower case, then there is only one possible match.
I'm pretty sure I could decode easy seeds (ie only letters and spaces, words are English). Throw one up here, and I'll see if I can do it.
Still, you could assume that they used something, put the seed through a program which gives several possible decodings, and then freak someone out.
Unfortunately, I just don't see many opportunities to use this knowledge. If people post seeds in this forum, they use the string version, if they know it. If you see just numbers, then they probably generated it programatically.
Proven equations
The equation for uppercase is
X*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
example
the string length of A in AB would be 1 and B would be 0
for string AB I would do
65*31^1+66*31^0=2081
The equation for lowercase is
(X+32)*31^y
X being the charactor code
y being the string length starting at 0 from the end to the start
for string ab I would do
(65+32)*31^1+(66+32)*31^0=3105
To decode world seeds
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
Basically, you keep trying letters until the combo equals that of the seed.
for lowercase letters, you would add 32.
Research/Thoughts
The time has come to finally pick apart the world seeds, and create a decoding algorithm. In this thread, I will be listing my finds, my research, everything I can figure out about seeds, and how to reverse engineer them into words if I can figure that out. Eventually, if the time ever comes, I will release a program in the 3rd party minecraft programs section for the purpose of decoding seeds. Leave comments on help with this project!
Please, tell me if this has already been discovered.
What I figured out so far:
To predict 3 letter seeds
Take the keyboard press codes and add 32 to them
After doing this, multiply those codes by 31 to a decreasing exponent of the seeds length.
Add the results to reach the seed for a 3 letter biome.
1 letter seeds are the original keyboard code added by 32.
Minecraft uses the string length of the entered seed as a exponent for the multiplication!
This can be used to predict ANY lowercase seed, before even starting the map.
Now to figure out how to reverse engineer a seed...
Edit: Heres a equation for those who want to try this: (x+32)*31^y
x is the letter character code
y is the string length of the seed, ending at 0
Note! The string length ends at 0. So for string ab, the total length would be 1
To solve this equation, the y gradually receedes from the maximum length as you add more x's
for example, if I wanted to solve a ab seed, I would do
(65+32)*31^1+(66+32)*31^0=3105
Use addition to add additional letters to this
Edit2: Uppercase letters have been solved!
The equation for uppercase is
X*31^y
so for the seed AB, I would do
65*31^1+66*31^0=2081
The final thing now is reverse engineering...
Edit: I'm opening up C# to see if I can figure out any reverse math method using programming.
Edit2: I decided to use a brute method. I'm going to have the program create bigger and bigger possible strings, while guessing the letters of the alphabet in the max amount of orders. I might not be able to finish up till tomorrow though since I need sleep.
This program will take quite a bit.
I'm turning in for the night, I'll work on creating a decoding program for 1-2 hours a day.
I will also continue my research on minecraft seeds, and try to create a hand-written method.
I was unable to stay away from figuring this out. I'm in one of those moods where I just need to solve it. I always get in these moods every once in a while.
I've been thinking and paceing about my house, and I've come up with several theorys.
A minecraft seed can not be solved by a handwritted equation.
A minecraft seed must be solved with a program.
Therefore, by these theorys I discovered, I created some ideas as to what programming is required.
The program must be a brute force program
Since my head currently feels full, I'm just going to dump all of what I'm thinking as to this project.
The program will need to have 2 arrays of both uppercase and lowercase letters.
The program will need to start at a length of 0, and slowly rise. It will need to check every arithmatic combination between the letters all of the letters. So for example,
aa
aA
ab
aB
ect.
This theory of brute forcing the world seed means that the program will indeed take a long time depending on the size of the seed.
Notice: I just noticed that I will probably also have to incorperate numbers, which as a seed end up exactly the same. I may just ignore numbers and generate a string of letters regardless of if the original seed had numbers in it.
I came up with some hand math.
It's very complicated and time consuming without a program, but totally possible.
You basically take the numeric seed you have, and compair it by combinations of numbers.
Heres a example
Say we have this
2081
basically, we will manually test each string of numbers corrosponding with letters.
This manual hand process is massive time consuming, but until I get a working build of the program out, it's it.
Note: Your free to use any of my work so long as you give me credit for the ideas and plans.
So. For the sake of this example, we are only going to test A and B, you would really have to test the whole alphabet including uppercase and lowercase letters, and even numbers!
A=65
B=66
65*31^1=2015
66*31^0=66
2015+66=2081!
That is the reason I'm creating a brute forcer for this.
Without one, testing every single combination would take you AGES.
Wow, this thread has more information about seeds by now then the minecraft wiki!
EDIT: Even WITH a bruteforcer, it will be next impossible to get the letters in the correct order. The result with probably favor the A and above range, and require you to re-arrange it.
I just finished updating my build of C#, I'm gonna get back to the programming. Wish me luck :wink.gif:.
It's really amazing how the brain works. By now I have completely new programaaming theorys then what I had at 10:00pm. It is now 12:53 AM :tongue.gif:.
Program is looking okay so far, I have single letters down. Now to move on to multi- letters.
Back from a long night of sleeping. I came up with a new method in my sleep that would easily incorperate all of the letters into about 10 lines of code I'd say. I'm going to try it now. I also came up with a double check method in my sleep to put the letters in the correct order.
I'm putting that off to do more research on how minecraft generates seeds with both letters and numbers existing.
With my new research on number + letter algorithms, I found that for 2 letters with one number inbetween, the equation is as follows.
Lets say we were solving for C1D
67*31^2=
68*31^1=
66495
461+60=521
65974
For ever extra scale the letters increase by, you add 30.
I might get back to the programming soon, these number seeds are insanely complicated.
(Too much math: Didn't read)
I'm gonna try make a program to decode these things in python
No idea how to do it though without brute force, which is a shame
:/
by character code, you mean ASCII right?
but if you do...how can you possibly get a negative world seed?
A combination of characters generates a negative multiplier?
Just waiting for Forge to officially release for 1.13.x to remove unneeded mobs from 1.13, like Phantoms, from the game because, in my gameplay based opinion, they add nothing of value to the game.
Fun fact: Clicking a bed every 30 minutes doesn't make you a better player, it makes you one who clicks a bed every 30 minutes. Wouldn't you rather just mod them out of the game completely?
but if it's ASCII, shouldn't all numbers be positive?
OHHHH, righto, so we're including the overflow
OK, thanks
This math seems insanely complex, all Minecraft really does with your text seeds is convert each character into it's decimal code, multiply the codes together, and output the result as a seed which is then fed into the terrain generator process to generate all of the random blocks in the chunks for each biome.
I wonder what Minecraft would do with chinese character encoding as input to the seed generator, as depending on the encoding method, each character could have approximately 103,000 or more different possible representations! :wink.gif:
Cheers ...
BrickVoid
The number is blue is what you want to use. So, '0' = 48. 'A' = 65. 'a' = 97.
The formula is on a java-doc page:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode()
Even though the algorithm is deterministic, it results in a loss of information. So going backwards with 100% certainty is not possible. For example, 'Ab' and 'BC' should give the same value:
'Ab'
= 65 * 31 + 98
= 2015 + 98
= 2113
'BC'
= 66 * 31 + 67
= 2046 + 67
= 2113
If I was given the seed 2113 to decode, I would go to Wolfram Alpha and type '2113 in base 31'
The full range of alphabetic possibilities are in the spoiler:
Wolfram Alpha gives me '2 6 5'.
For a upper case letter, subtract '2 2'.
For a lower case letter, subtract '3 3'.
If we think it is uc,uc then we need to subtract '2 2 0' and '0 2 2'
'2 6 5'
-'2 2 0'
-'0 2 2'
= '0 2 3' = BC
If we think it is uc,lc then we need to subtract '2 2 0' and '0 3 3'
'2 6 5'
-'2 2 0'
-'0 3 3'
= '0 1 2' = Ab
If we think it is lc,lc then we need to subtract '3 3 0' and '0 3 3'
'2 6 5'
-'3 3 0'
-'0 3 3'
= '-31 0 2' = invalid
If we think it is lc,uc then we need to subtract '3 3 0' and '0 2 2'
'2 6 5'
-'3 3 0'
-'0 2 2'
= '-31 1 3' = invalid
That method should work a lot better than what you were trying to do.
With the way you described how it works, it seems like each number should be generatable, even if you don't overflow.
You could assume that the number didn't overflow at all, or if it's negative, assume that it only overflowed once, and then try to decode it from there.
Of course, you probably know more about this subject than I do, and there could be something I overlooked.
No, the point is trying to convert the number into a letter/ascii representation of it.
Unfortunately, there are almost infinite codes for each seed, so you can't tell exactly which one was used.
Still, you could assume that they used something, put the seed through a program which gives several possible decodings, and then freak someone out.
That's not true.
Assuming that the ascii (string) version of the seed is less than about 12 characters, then no overflow occurred, and there is at most 4^n possible alphanumeric strings that match. (where n is the number of characters in the original ascii seed.)
If you assume the seed is made of upper/lower case letters, then the maximum is 2^n different strings.
If you know in advance the string is all lower case, then there is only one possible match.
I'm pretty sure I could decode easy seeds (ie only letters and spaces, words are English). Throw one up here, and I'll see if I can do it.
Unfortunately, I just don't see many opportunities to use this knowledge. If people post seeds in this forum, they use the string version, if they know it. If you see just numbers, then they probably generated it programatically.