Use case:
1) Site administrator Victor chooses a secret key K and shares it with no one.
2) Site user Alice asks Victor for an anon-id that only she can use.
3) Victor gives Alice the pair A;H, where H is a random number and A = hash(K;H;K).
4) When Alice uses her anon-id, Victor displays A on the site leaderboard.
5) Another site user Mallory sees A and sends Victor the pair A;H'.
6) Victor accepts Mallory's pair A;H' for any H' if and only if A = hash(K;H';K), which is virtually impossible unless H' = H.
An anon-id is composed of two parts: an a-id (public, username, 16 characters) and an h-id (private, password, 32 characters).
Once an anon-id is created, the a-id can be displayed and, only together with the h-id, can be validated.
As long as the h-id is not compromised, it is virtually impossible to validate an anon-id solely from the public a-id.
This enables each user to build a reputation within a website/app using their provided a-id, with the assurance that these anonymous identifiers are extremely difficult to forge.
This demo can be used to gauge the difficulty of finding a valid anon-id by guessing its h-id.
Examples of websites using this concept of anonymous identifiers on their leaderboards: Cross-Pollinator, AlgoDeduce.
Note that the actual a-id representation (image or avatar) can vary to fit the website/app graphic design.
a-id Python implementation on GitHub. Enjoy!