Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.6k
[Uid] add AbstractUid and interop with base-58/32/RFC4122 encodings#36074
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
I don't know the future plans of this component (will we keep adding other popular UIDs?) but this doesn't look future-proof to me. Any method that we add here could look outdated or unused in other future UID generators. This reminds me to the |
nicolas-grekas commentedMar 14, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
All serious id schemes use 128-bit identifiers, which is wide enough to deal with any use cases for the foreseeable future. Then, base58, base32, uuid-format are 3 widely used representation of 128-bit numbers. They fit various needs: 58 bit for compactness, 32 bit for case insensitivity, uuid-format for interop with e.g. DB storages. My opinion is that all three of them are generic enough to land in the component. Your comparison with salted-encoders is good: wedid add them to the component because that's what ppl were widely using at the time. We don't know the future but we know these encoding schemes are widely used and have good reasons to remain so. |
UUIDv6 would make sense. I'm not sure about others. I think we should work on integrating with Doctrine before considering other schemes. Then future will tell, there are no plans... |
Can you rebase? |
Now rebased. |
Thank you@nicolas-grekas. |
leftover fromsymfony#36074
This PR was merged into the 5.1-dev branch.Discussion----------[UID] remove unused property| Q | A| ------------- | ---| Branch? | master| Bug fix? | no| New feature? | no <!-- please update src/**/CHANGELOG.md files -->| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->| Tickets || License | MIT| Doc PR |leftover from#36074Commits-------901e62a remove unused uuid property
Uh oh!
There was an error while loading.Please reload this page.
This PR provides a base
AbstractUid
class that is shared byUuid
andUlid
.It adds new methods that provide interoperability between all types of UIDs but also between different encodings of UIDs:
toBase58()
using thebitcoin alphabet - that's 22 chars aka "short-ids" - case sensitivetoBase32()
usingCrockford's alphabet - 26 chars ids - case insensitivetoRfc4122()
to represent as a UUID-formatted string - 36 charsThis adds to
toBinary()
and tofromString()
, the latter being able to cope with any of the 4 representations to create any kind of UIDs.