Skip to content

Instantly share code, notes, and snippets.

@dajare
Last active January 3, 2021 18:25
Show Gist options
  • Save dajare/721c1ca973d7325efb69ba71b5731920 to your computer and use it in GitHub Desktop.
Save dajare/721c1ca973d7325efb69ba71b5731920 to your computer and use it in GitHub Desktop.
Shell script to convert unix timestamp to base36 (alphanumeric, lowercase)
#!/bin/bash
# takes unix timestamp and converts to base36
# ht: https://en.wikipedia.org/wiki/Base36#bash_implementation
value=$(date +%s)
result=""
base36="0123456789abcdefghijklmnopqrstuvwxyz"
while true; do
result=${base36:((value%36)):1}${result}
if [ $((value=${value}/36)) -eq 0 ]; then
break
fi
done
echo ${result}
@caorongjin
Copy link

Well, yes, you need to cut the last 4 out (minus any '=' padding). Is this one better:

date +%s | openssl base64 | sed 's/=//' | tail -c -5
xOAo

For some reason, there seems to be trailing whitespace so I need a -5 instead of a -4.

Why Convert^xy does that, beats me. And yes, if Typora is case insensitive… that's just, well, insensitive.

@dajare
Copy link
Author

dajare commented Jan 30, 2018

@caorongjin said:

And yes, if Typora is case insensitive… that's just, well, insensitive.

LOL. @typora actually is a bit weird in handling case differences. I'll do a bit of testing, and if I can work out the pattern, will post a bug report.

@roblogic
Copy link

Nice base36 converter.

The openssl (and unix) base64 algorithm is for encoding binary data into ASCII strings, not for converting integers to different radix (numeric base). https://en.wikipedia.org/wiki/Base64

To convert an integer to an exotic numeric base you'll need something like these: https://stackoverflow.com/questions/14471692/bash-decimal-to-base-62-conversion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment