scru128


Namescru128 JSON
Version 3.0.3 PyPI version JSON
download
home_pagehttps://github.com/scru128/python
SummarySCRU128: Sortable, Clock and Random number-based Unique identifier
upload_time2024-03-21 13:46:17
maintainerNone
docs_urlNone
authorLiosK
requires_python<4.0,>=3.8
licenseApache-2.0
keywords identifier uuid guid ulid ksuid
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # SCRU128: Sortable, Clock and Random number-based Unique identifier

[![PyPI](https://img.shields.io/pypi/v/scru128)](https://pypi.org/project/scru128/)
[![License](https://img.shields.io/pypi/l/scru128)](https://github.com/scru128/python/blob/main/LICENSE)

SCRU128 ID is yet another attempt to supersede [UUID] for the users who need
decentralized, globally unique time-ordered identifiers. SCRU128 is inspired by
[ULID] and [KSUID] and has the following features:

- 128-bit unsigned integer type
- Sortable by generation time (as integer and as text)
- 25-digit case-insensitive textual representation (Base36)
- 48-bit millisecond Unix timestamp that ensures useful life until year 10889
- Up to 281 trillion time-ordered but unpredictable unique IDs per millisecond
- 80-bit three-layer randomness for global uniqueness

```python
import scru128

# generate a new identifier object
x = scru128.new()
print(x)  # e.g., "036z951mhjikzik2gsl81gr7l"
print(int(x))  # as a 128-bit unsigned integer

# generate a textual representation directly
print(scru128.new_string())  # e.g., "036z951mhzx67t63mq9xe6q0j"
```

See [SCRU128 Specification] for details.

[UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier
[ULID]: https://github.com/ulid/spec
[KSUID]: https://github.com/segmentio/ksuid
[SCRU128 Specification]: https://github.com/scru128/spec

## Command-line interface

`scru128` generates SCRU128 IDs.

```bash
$ scru128
036zg4zlmdwdz8414eim77vct
$ scru128 -n 4
036zg4zlv707wnczl108ky4i7
036zg4zlv707wnczl12towmho
036zg4zlv707wnczl14hirm6n
036zg4zlv707wnczl17110shh
```

`scru128-inspect` prints the components of given SCRU128 IDs as human- and
machine-readable JSON objects.

```bash
$ scru128 -n 2 | scru128-inspect
{
  "input":        "036zg552n91mt9s0gyhdwif95",
  "canonical":    "036zg552n91mt9s0gyhdwif95",
  "timestampIso": "2022-03-20T08:34:01.493+00:00",
  "timestamp":    "1647765241493",
  "counterHi":    "10145723",
  "counterLo":    "13179084",
  "entropy":      "4167049657",
  "fieldsHex":    ["017fa6763e95", "9acfbb", "c918cc", "f86021b9"]
}
{
  "input":        "036zg552n91mt9s0gyj7i56sj",
  "canonical":    "036zg552n91mt9s0gyj7i56sj",
  "timestampIso": "2022-03-20T08:34:01.493+00:00",
  "timestamp":    "1647765241493",
  "counterHi":    "10145723",
  "counterLo":    "13179085",
  "entropy":      "3838717859",
  "fieldsHex":    ["017fa6763e95", "9acfbb", "c918cd", "e4ce2fa3"]
}
```

## License

Licensed under the Apache License, Version 2.0.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/scru128/python",
    "name": "scru128",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.8",
    "maintainer_email": null,
    "keywords": "identifier, uuid, guid, ulid, ksuid",
    "author": "LiosK",
    "author_email": "contact@mail.liosk.net",
    "download_url": "https://files.pythonhosted.org/packages/81/80/e06eab1e2d0a187a71398da226d1f8bf9199719ac911eed24e2c78ef00fb/scru128-3.0.3.tar.gz",
    "platform": null,
    "description": "# SCRU128: Sortable, Clock and Random number-based Unique identifier\n\n[![PyPI](https://img.shields.io/pypi/v/scru128)](https://pypi.org/project/scru128/)\n[![License](https://img.shields.io/pypi/l/scru128)](https://github.com/scru128/python/blob/main/LICENSE)\n\nSCRU128 ID is yet another attempt to supersede [UUID] for the users who need\ndecentralized, globally unique time-ordered identifiers. SCRU128 is inspired by\n[ULID] and [KSUID] and has the following features:\n\n- 128-bit unsigned integer type\n- Sortable by generation time (as integer and as text)\n- 25-digit case-insensitive textual representation (Base36)\n- 48-bit millisecond Unix timestamp that ensures useful life until year 10889\n- Up to 281 trillion time-ordered but unpredictable unique IDs per millisecond\n- 80-bit three-layer randomness for global uniqueness\n\n```python\nimport scru128\n\n# generate a new identifier object\nx = scru128.new()\nprint(x)  # e.g., \"036z951mhjikzik2gsl81gr7l\"\nprint(int(x))  # as a 128-bit unsigned integer\n\n# generate a textual representation directly\nprint(scru128.new_string())  # e.g., \"036z951mhzx67t63mq9xe6q0j\"\n```\n\nSee [SCRU128 Specification] for details.\n\n[UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier\n[ULID]: https://github.com/ulid/spec\n[KSUID]: https://github.com/segmentio/ksuid\n[SCRU128 Specification]: https://github.com/scru128/spec\n\n## Command-line interface\n\n`scru128` generates SCRU128 IDs.\n\n```bash\n$ scru128\n036zg4zlmdwdz8414eim77vct\n$ scru128 -n 4\n036zg4zlv707wnczl108ky4i7\n036zg4zlv707wnczl12towmho\n036zg4zlv707wnczl14hirm6n\n036zg4zlv707wnczl17110shh\n```\n\n`scru128-inspect` prints the components of given SCRU128 IDs as human- and\nmachine-readable JSON objects.\n\n```bash\n$ scru128 -n 2 | scru128-inspect\n{\n  \"input\":        \"036zg552n91mt9s0gyhdwif95\",\n  \"canonical\":    \"036zg552n91mt9s0gyhdwif95\",\n  \"timestampIso\": \"2022-03-20T08:34:01.493+00:00\",\n  \"timestamp\":    \"1647765241493\",\n  \"counterHi\":    \"10145723\",\n  \"counterLo\":    \"13179084\",\n  \"entropy\":      \"4167049657\",\n  \"fieldsHex\":    [\"017fa6763e95\", \"9acfbb\", \"c918cc\", \"f86021b9\"]\n}\n{\n  \"input\":        \"036zg552n91mt9s0gyj7i56sj\",\n  \"canonical\":    \"036zg552n91mt9s0gyj7i56sj\",\n  \"timestampIso\": \"2022-03-20T08:34:01.493+00:00\",\n  \"timestamp\":    \"1647765241493\",\n  \"counterHi\":    \"10145723\",\n  \"counterLo\":    \"13179085\",\n  \"entropy\":      \"3838717859\",\n  \"fieldsHex\":    [\"017fa6763e95\", \"9acfbb\", \"c918cd\", \"e4ce2fa3\"]\n}\n```\n\n## License\n\nLicensed under the Apache License, Version 2.0.\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "SCRU128: Sortable, Clock and Random number-based Unique identifier",
    "version": "3.0.3",
    "project_urls": {
        "Homepage": "https://github.com/scru128/python"
    },
    "split_keywords": [
        "identifier",
        " uuid",
        " guid",
        " ulid",
        " ksuid"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "125c9dadaf0980c8cc7d866e27be9dbf9913ade9561a37c4a8aa07fad14b5277",
                "md5": "fcfd1c55bf265e50408afed044f4f57b",
                "sha256": "bb3e5117f5d39cf4fb902eb3e703bc9afddf0a49fb4baaffcc800b010262beac"
            },
            "downloads": -1,
            "filename": "scru128-3.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fcfd1c55bf265e50408afed044f4f57b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.8",
            "size": 10674,
            "upload_time": "2024-03-21T13:46:15",
            "upload_time_iso_8601": "2024-03-21T13:46:15.057146Z",
            "url": "https://files.pythonhosted.org/packages/12/5c/9dadaf0980c8cc7d866e27be9dbf9913ade9561a37c4a8aa07fad14b5277/scru128-3.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8180e06eab1e2d0a187a71398da226d1f8bf9199719ac911eed24e2c78ef00fb",
                "md5": "fc0386a0a3d2cd21292221622f92f65d",
                "sha256": "90fcc7bcbb4226bc5e888d3339fd9c1b0603424b3534b5b710beef507c0df9c5"
            },
            "downloads": -1,
            "filename": "scru128-3.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "fc0386a0a3d2cd21292221622f92f65d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.8",
            "size": 9561,
            "upload_time": "2024-03-21T13:46:17",
            "upload_time_iso_8601": "2024-03-21T13:46:17.081897Z",
            "url": "https://files.pythonhosted.org/packages/81/80/e06eab1e2d0a187a71398da226d1f8bf9199719ac911eed24e2c78ef00fb/scru128-3.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-21 13:46:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "scru128",
    "github_project": "python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "scru128"
}
        
Elapsed time: 0.23058s