user1236148
user1236148

Reputation: 41

Create a unique 4-byte Integer number from a String in PHP

I have a SQL table which uses strings for a key. I need to convert that string (max. 18 Characters) to a unique (!) 4-byte integer using PHP. Can anyone help?

Upvotes: 4

Views: 745

Answers (3)

Piskvor left the building
Piskvor left the building

Reputation: 92772

Unique? Not possible, sorry.

Let's take a closer look:

With 18 characters, even if we were assuming only the 128 possible characters of ASCII (7 bits), you'd get 128^18 possible strings (and I'm not even going into the possibility of shorter strings!), which is about 8E37 ( 8 and 37 zeroes ).

With a 4-byte integer, you're getting 256^4 possible integers, which is about 4E9 ( 4 billion ).

So, you have about 4E28 more strings than you have integers; you can't have an unique mapping.

Therefore, you'll definitely run into a collision as soon as you enter the 4294967297th key, but it is possible to run into one as soon as you enter more than one.

See also: http://en.wikipedia.org/wiki/Pigeonhole_principle

Upvotes: 1

Alex Howansky
Alex Howansky

Reputation: 53573

You can't. A four-byte integer can represent 2^32 = 4 billion values, which is not enough to hold your target space.

If you currently have less then 4 billion rows in the table, you could create a cross table that just assigns an incremental value to each. You'd be limited to 4 billion rows with this approach, but this may be fine for your situation.

Upvotes: 0

usr
usr

Reputation: 171188

Keep a lookup-table of strings to integers. Everytime you encounter a new string you add it to the mapping table and assign it a new unique ID. This will work for about 2^32 strings which is probably enough.

There is no way to do this for more that 2^32 distinct strings.

Upvotes: 0

Related Questions