Îõ³h*‰3=      !"#$%&'()*+,-./0123456789:;<0.3.0.5 Safe-Inferred"3Ýð=locatorsŒRepresent a number in Locator16a format. This uses the Locator16 symbol set, and additionally specifies that no symbol can be repeated. The aÅ in Locator16a represents that this transformation is done on the cheap; when converting if we end up with '9' '9' we simply pick the subsequent digit in the enum, in this case getting you '9' 'K'. Note that the transformation is not reversible. A number like 4369 (which is 0x1111, incidentally) encodes as 12C4. So do 4370, 4371, and 4372–. The point is not uniqueness, but readibility in adverse conditions. So while you can count locators, they don't map continuously to base10 integers.”The first argument is the number of digits you'd like in the locator; if the number passed in is less than 16^limit, then the result will be padded.toLocator16a 6 436912C40F>locatorsÃGiven a number encoded as a Locator, convert it back to an integer. ?@=A>BC Safe-Inferred"3ÝðÚlocators8A symbol set with sixteen uniquely pronounceable digits.ÖThe fact there are sixteen symbols is more an indication of a certain degree of bullheaded-ness on the part of the author, and less of any kind of actual requirement. We might have a slighly better readback score if we dropped to 15 or 14 unique characters. It does mean you can match up with hexidecimal, which is not entirely without merit.ÇThe grouping of letters and numbers was the hard part; having come up with the set and deconflicted the choices, the ordering is then entirely arbitrary. Since there are some numbers, might as well have them at the same place they correspond to in base 10; the letters were then allocated in alpha order in the remaining slots.locators'0' 0thlocators'1' 1stlocators'2' 2ndlocators'C' 3rdlocators'4' 4th locators'F' 5th locators'H' 6th locators'7' 7th locators'8' 8th locators'9' 9thlocators'K' 10thlocators'L' 11thlocators'M' 12thlocators'R' 13thlocators'X' 14thlocators'Y' 15thlocators¶Given a number, convert it to a string in the English16 base 16 symbol alphabet. You can use this as a replacement for the standard '0'-'9' 'A'-'F' symbols traditionally used to express hexidemimal, though really the fact that we came up with 16 total unique symbols was a nice co-incidence, not a requirement.locatorsŒRepresent a number in English16a format. This uses the Locator16 symbol set, and additionally specifies that no symbol can be repeated. The aÅ in Locator16a represents that this transformation is done on the cheap; when converting if we end up with '9' '9' we simply pick the subsequent digit in the enum, in this case getting you '9' 'K'. Note that the transformation is not reversible. A number like 4369 (which is 0x1111, incidentally) encodes as 12C4. So do 4370, 4371, and 4372–. The point is not uniqueness, but readibility in adverse conditions. So while you can count locators, they don't map continuously to base10 integers.”The first argument is the number of digits you'd like in the locator; if the number passed in is less than 16^limit, then the result will be padded.toEnglish16a 6 436912C40FlocatorsÃGiven a number encoded in Locator16, convert it back to an integer.locatorsÏTake an arbitrary sequence of bytes, hash it with SHA1, then format as a short digits-long Locator16 string.&hashStringToLocator16a 6 "Hello World"M48HR0  Safe-Inferred"!locators¨Utility function to prepend '0' characters to a string representing a number. This allows you to ensure a fixed width for numbers that are less than the desired width in size. This comes up frequently when representing numbers in other bases greater than 10 as they are inevitably presented as text, and not having them evenly justified can (at best) be ugly and (at worst) actually lead to parsing and conversion bugs.locatorsÆTake an arbitrary string, hash it, then pad it with zeros up to be a digits-long string in base 62.‡You may be interested to know that the 160-bit SHA1 hash used here can be expressed without loss as 27 digits of base 62, for example:#hashStringToBase62 27 "Hello World"1T8Sj4C5jVU6iQXCwCwJEPSWX6u Safe-Inferred"3ÝV locators;A symbol set with twenty-five visually distinct characters.ÞThese are not protected against similar pronounciations; if you need to read your identifiers aloud use  English16 instead.!locators'0' 0th"locators'1' 1st#locators'3' 2nd$locators'4' 3rd%locators'7' 4th&locators'8' 5th'locators'9' 6th(locators'A' 7th)locators'C' 8th*locators'E' 9th+locators'G' 10th,locators'H' 11th-locators'J' 12th.locators'K' 13th/locators'L' 14th0locators'M' 15th1locators'N' 16th2locators'P' 17th3locators'S' 18th4locators'T' 19th5locators'V' 20th6locators'W' 21st7locators'X' 22nd8locators'Y' 23rd9locators'Z' 24th:locators»Given a number, convert it to a string in the Latin25 base 25 symbol alphabet. This is useful for primary keys and object identifiers that you need to scan for in log output, for example.;locatorsÃGiven a number encoded in Locator16, convert it back to an integer.<locatorsÏTake an arbitrary sequence of bytes, hash it with SHA1, then format as a short limit-long Latin25 string.ÒhashStringToLatin25 5 "You'll get used to it. Or, you'll have a psychotic episode"SG8XP117 characters is the widest hash you can request. !"#$%&'()*+,-./0123456789:;< Andrew Cowie Experimental Safe-Inferred"µ=  !"#$%&'()*+,-./0123456789;:<=  !"#$%&'()*+,-./0123456789;:<Ä      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJË'locators-0.3.0.5-Gy18gZh1RlcGMWLypMLuMm Data.LocatorlocatorsData.Locator.CommonData.Locator.English16Data.Locator.HashesData.Locator.Latin25LocatorlocatorToDigitdigitToLocator English16ZeroOneTwoCharlieFourFoxtrotHotelSevenEightNineKiloLimaMikeRomeoXRayYankee toEnglish16 toEnglish16a fromEnglish16hashStringToEnglish16a toLocator16 toLocator16a fromLocator16hashStringToLocator16atoBase62 padWithZeros fromBase62hashStringToBase62Latin25Zero'One'Three'Four'Seven'Eight'Nine'Alpha'Charlie'Echo'Golf'Hotel'Juliet'Kilo'Lima'Mike' November'Papa'Sierra'Tango'Victor'Whiskey'XRay'Yankee'Zulu' toLatin25 fromLatin25hashStringToLatin25toLocatorUnique fromLocator representvaluemultiplyconcatToIntegerdigest