Why don’t you just truncate SHA1 or MD5? You’ll have more collisions then if you didn’t truncate, but it’s still better than designing your own. Note that you can base64-encode the truncated hash, rather than using hexadecimal. E.g.
import base64
import hashlib
hasher = hashlib.sha1("The quick brown fox")
base64.urlsafe_b64encode(hasher.digest()[:10])
You can truncate as little (including not at all) or as much as you want, as long as you understand the tradeoffs.
EDIT: Since you mentioned URL-safe, you can use urlsafe_b64encode and urlsafe_b64decode, which uses - and _ rather than + and /.