hp43
hp43

Reputation: 375

Generate unique hash from filename

I'm looking to generate a unique random hash that has a miniscule chance of being duplicated. It should only contain numbers, and I want it to be 4 characters long. I have the file path in the form of

filepath = "c:\\users\\john\\filename.csv"

Now, I'd like to only select the "filename" part of that string and create a hash from that filename, though I want it to be different each time so if two users upload a similarly named file it will likely generate a different hash code. What's the best way to go about doing this?

I will be using this hash to append "001", "002", etc. on to create student IDs.

Upvotes: 2

Views: 13134

Answers (1)

Reed Copsey
Reed Copsey

Reputation: 564413

Generating a unique hash from a file's filename is fairly simple.

However...

It should only contain numbers, and I want it to be 4 characters long.

With only 4 numeric characters, you're going to be guaranteed to have a collision with 1000 different files, and will likely be hit quite a bit sooner. This makes it impossible to have a "minuscule chance of being duplicated".


Edit in response to comments:

You could do some simple type of hash, though this will give quite a few collisions:

string ComputeFourDigitStringHash(string filepath)
{
     string filename = System.IO.Path.GetFileNameWithoutExtension(filepath);
     int hash = filename.GetHashCode() % 10000;
     return hash.ToString("0000");
}

This will give you a 4 digit "hash" from the filename portion of the string. Note that it will have a lot of collisions, but it will give you something you can use.

Upvotes: 5

Related Questions