This issue was discovered by @larsyencken in valohai/ulid2#4; ulid2 uses the same decoding code as this library. Quoting that issue:
We discovered this problem by accident, when we realised that some (very far future ULIDs) the ULIDs appear to be not time-ordering.
For example, ULIDs that start with 0, 8, G or R are mapped to the same place.
It looks like the parsing of the first character has a cycle in it, instead of generating a new sequence of binary ULIDs.
I'm wondering whether this is a bug or a limitation of the encoding.
The same issue is reproducible using this library, too:
package main
import "fmt"
import "github.com/oklog/ulid"
func main() {
fmt.Println(ulid.MustParse("00000000000000000000000000"))
fmt.Println(ulid.MustParse("80000000000000000000000000"))
fmt.Println(ulid.MustParse("G0000000000000000000000000"))
fmt.Println(ulid.MustParse("R0000000000000000000000000"))
}
outputs
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
This issue was discovered by @larsyencken in valohai/ulid2#4; ulid2 uses the same decoding code as this library. Quoting that issue:
I'm wondering whether this is a bug or a limitation of the encoding.
The same issue is reproducible using this library, too:
outputs