We are restructuring our entire database / filesystem / user identity system. As a first step, we have determined that we need to assign each user/employee in an organization unique ID. Surprisingly enough, there does not seem to be theoretical resources regarding such a problem.
I wonder whether there are some recommendations for designing such a system. I have studied some ID schemes, but none of them seem to be practical in this case. In particular, UID or ISBN like systems are impractical because the codes are very long for people to remember or communicate. I have looked at history of CODEN system for assigning journal IDs and it is very inspiring, but I would prefer to avoid the problems they historically went through (changing system twice along the way).
Desired properties of the system
In my case, I have around 10.000 people. The system should (probably) have these properties:
- Uniqueness of IDS
- IDs should be easily communicated and remembered (i.e. not too long etc)
- Optionally the system should catch common mistakes in ID if not correct it.
I have considered
I considered including some sort of initials from names and brief analysis shows the following:
- By using initials (1 character from Given name, 1 from Surname) I split the people into groups with the largest one having 165 members (J.K.)
- By taking 1,2 first characters (1 from Given name, 2 from Surname) I get the largest group of 49 members.
- If I take 1,3 first character that I get the largest group of 18, which is better than taking 2,2 first characters from names where I get 39 people in the largest group.
I also consider adding a checksum character like in CODEN which would preferably not only avoid mistakes but also make automatic correction possible in most cases.
I also had a look at Plus Codes which has a great idea of NOT using some characters (like 0, I, etc) which can be easily mistaken for others. But this would collide with the intention to include initials of some sort.
Regarding the "catching errors" I have found an article about Check digit which also suggests Damm algorithm which however only concerns the case if the number codes are used. I might be able to construct a similar system for letters thought.
PS: I have searched SE sites and initially asked this question on SuperUser, but it has been rejected as off-topic. I am trying to find the right place to ask this, but it seems not obvious.