XstarS.GuidModule
2.4.0-preview
See the version list below for details.
dotnet add package XstarS.GuidModule --version 2.4.0-preview
NuGet\Install-Package XstarS.GuidModule -Version 2.4.0-preview
<PackageReference Include="XstarS.GuidModule" Version="2.4.0-preview" />
paket add XstarS.GuidModule --version 2.4.0-preview
#r "nuget: XstarS.GuidModule, 2.4.0-preview"
// Install XstarS.GuidModule as a Cake Addin #addin nuget:?package=XstarS.GuidModule&version=2.4.0-preview&prerelease // Install XstarS.GuidModule as a Cake Tool #tool nuget:?package=XstarS.GuidModule&version=2.4.0-preview&prerelease
F# GUID Module
Provides RFC 4122 (UUID) and RFC 9562 (UUIDREV) compliant GUID operations for F#. The orders of input parameters are adjusted to match F# pipeline patterns.
RFC 4122 UUID Standard
RFC 4122 defines the following five versions of UUID:
- Version 1: The time-based version, contains a 60-bit timestamp and a 12-bit MAC address.
- Version 2: DCE Security version, contains a 28-bit timestamp, a 12-bit MAC address and a 32-bit local ID.
- Version 3: The name-based version, using MD5 hashing to compute the hash of the namespace and name.
- Version 4: The randomly or pseudo-randomly generated version, equivalent to
Guid.NewGuid()
in .NET. - Version 5: The name-based version, using SHA-1 hashing to compute the hash of the namespace and name.
There is also a special Nil UUID whose bytes are all 0x00
s, which is equivalent to Guid.Empty
in .NET.
RFC 9562 UUID Standard
RFC 9562 defines the following three versions of UUID:
- Version 6: The reordered time-based version, field-compatible with Version 1 except that the timestamp is reordered to big-endian order.
- Version 7: The Unix Epoch time-based version, contains a 48-bit timestamp and a 74-bit random number, field-compatible with ULID.
- Version 8: Reserved for custom UUID formats, fields except the variant and version are user-defined.
There is also a special Max UUID whose bytes are all 0xff
s, which has no equivalent implementation in .NET (provided in this project).
F# GUID Module Usage
Core module: XNetEx.FSharp.Core.Guid
.
RFC-compliant GUID Generation
open System
open XNetEx.FSharp.Core
// load generator state from file.
let loadResult = Guid.loadState "state.bin"
// generate time-based GUID.
let guidV1 = Guid.newV1 () // 3944a871-aa14-11ed-8791-a9a9a46de54f
// generate randomized GUID.
let guidV4 = Guid.newV4 () // 0658f02d-45a4-4c25-b9d0-8ddbda3c3e08
// generate Unix time-based GUID.
let guidV7 = Guid.newV7 () // 018640c6-0dc9-7189-a644-31acdba4cabc
// generate name-based GUID.
let guidV3 = Guid.newV3S Guid.nsDns "github.com"
// 7f4771a0-1982-373d-928f-d31140a51652
let guidV5 = "github.com" |> Guid.newV5S Guid.nsDns
// 6fca3dd2-d61d-58de-9363-1574b382ea68
// build time-based GUID.
let guid6 = Guid.empty
|> Guid.replaceVariant Guid.Variant.Rfc4122
|> Guid.replaceVersion Guid.Version.Version6
|> Guid.replaceTime DateTime.UtcNow
|> Guid.replaceClockSeq 0x0123s
|> Guid.replaceNodeId (Array.init 6 (((+) 1) >> byte))
// 1edaa178-dec2-6054-8123-010203040506
// build Unix time-based GUID.
let guid7 = Guid.newV4 ()
|> Guid.replaceVersion Guid.Version.Version7
|> Guid.replaceTime DateTime.UtcNow
// 018640db-de47-7ab9-bf00-6119a1033265
Common GUID Operations
open XNetEx.FSharp.Core
// GUID parsing and formatting.
let guid1 = Guid.parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
let guid2 = "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}"
|> Guid.parseExact "B"
printfn "%s" (guid2 |> Guid.format "X")
// GUID construction and deconstruction.
let guid3 = Guid.ofFields
0x00112233 0x4455s 0x6677s (0x88uy, 0x99uy)
(0xAAuy, 0xBBuy, 0xCCuy, 0xDDuy, 0xEEuy, 0xFFuy)
let guid3Fields = guid3 |> Guid.toFields
let guid4 = Array.map byte
[| 0x00; 0x11; 0x22; 0x33; 0x44; 0x55; 0x66; 0x77
0x88; 0x99; 0xAA; 0xBB; 0xCC; 0xDD; 0xEE; 0xFF |]
|> Guid.ofBytesUuid
let guid4Bytes = Guid.toBytes guid4
assert (guid3 = guid4)
let guid5 = Array.map byte
[| 0x33; 0x22; 0x11; 0x00; 0x55; 0x44; 0x77; 0x66
0x88; 0x99; 0xAA; 0xBB; 0xCC; 0xDD; 0xEE; 0xFF |]
|> Guid.ofBytes
let guid5Bytes = Guid.toBytesUuid guid5
assert (guid3 = guid5)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- FSharp.Core (>= 6.0.0)
- XstarS.GuidGenerators (>= 2.4.0-preview)
-
.NETStandard 2.1
- FSharp.Core (>= 6.0.0)
- XstarS.GuidGenerators (>= 2.4.0-preview)
-
net8.0
- FSharp.Core (>= 6.0.0)
- XstarS.GuidGenerators (>= 2.4.0-preview)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
2.4.3 | 81 | 11/13/2024 | |
2.4.2 | 97 | 11/9/2024 | |
2.4.1 | 91 | 10/10/2024 | |
2.4.0 | 121 | 5/12/2024 | |
2.4.0-preview | 112 | 4/20/2024 | |
2.3.1 | 118 | 3/24/2024 | |
2.3.0 | 123 | 2/24/2024 | |
2.2.1 | 136 | 2/8/2024 | |
2.2.0 | 100 | 1/26/2024 | |
2.1.2 | 118 | 1/22/2024 | |
2.1.1 | 124 | 1/20/2024 | |
2.1.0 | 130 | 1/12/2024 | |
2.0.0 | 151 | 12/24/2023 | |
2.0.0-rc-19 | 138 | 12/22/2023 | |
2.0.0-rc-16 | 114 | 12/12/2023 | |
2.0.0-rc-15 | 132 | 12/6/2023 | |
2.0.0-rc-14 | 132 | 11/26/2023 | |
2.0.0-rc-12.5 | 102 | 10/15/2023 | |
2.0.0-rc-12 | 89 | 10/15/2023 | |
2.0.0-rc-00 | 133 | 7/15/2023 | |
2.0.0-preview-04.5 | 92 | 6/4/2023 | |
2.0.0-preview-04 | 114 | 5/28/2023 | |
2.0.0-preview-03.8 | 81 | 5/20/2023 | |
2.0.0-preview-03.5 | 83 | 5/14/2023 | |
2.0.0-preview-03 | 126 | 4/15/2023 | |
2.0.0-preview-02.5 | 105 | 3/26/2023 | |
2.0.0-preview-02 | 146 | 3/4/2023 | |
2.0.0-preview-01 | 141 | 2/12/2023 | |
1.14.3 | 71 | 11/13/2024 | |
1.14.2 | 74 | 11/9/2024 | |
1.14.1 | 80 | 10/10/2024 | |
1.14.0 | 105 | 5/12/2024 | |
1.14.0-preview | 108 | 4/20/2024 | |
1.13.0 | 118 | 2/24/2024 | |
1.12.1 | 125 | 2/8/2024 | |
1.12.0 | 98 | 1/26/2024 | |
1.11.2 | 116 | 1/22/2024 | |
1.11.1 | 113 | 1/20/2024 | |
1.11.0 | 116 | 1/12/2024 | |
1.10.0 | 126 | 12/24/2023 | |
1.9.5 | 142 | 12/22/2023 | |
1.9.1 | 128 | 12/12/2023 | |
1.9.0 | 164 | 12/6/2023 | |
1.8.0 | 150 | 11/26/2023 | |
1.7.8 | 137 | 10/15/2023 | |
1.7.5 | 160 | 6/4/2023 | |
1.7.1 | 141 | 5/28/2023 | |
1.7.0 | 144 | 5/20/2023 | |
1.6.0 | 157 | 5/13/2023 | |
1.5.0 | 286 | 2/5/2023 | |
1.4.0 | 299 | 1/21/2023 | |
1.3.1 | 295 | 1/15/2023 | |
1.3.0 | 289 | 12/31/2022 | |
1.2.0 | 412 | 9/30/2022 | |
1.1.1 | 417 | 8/5/2022 | |
1.1.0 | 398 | 7/25/2022 |