Convert MD5 to base62 for URL

前端 未结 9 531
再見小時候
再見小時候 2020-12-30 10:43

I have a script to convert to base 62 (A-Za-z0-9) but how do I get a number out of MD5?

I have read in many places that because the number from an MD5 is bigger than

9条回答
  •  清酒与你
    2020-12-30 11:36

    As of PHP 5.3.2, GMP supports bases up to 62 (was previously only 36), so brianreavis's suggestion was very close. I think the simplest answer to your question is thus:

    function base62hash($source, $chars = 22) {
      return substr(gmp_strval(gmp_init(md5($source), 16), 62), 0, $chars);
    }
    

    Converting from base-16 to base-62 obviously has space benefits. A normal 128-bit MD5 hash is 32 chars in hex, but in base-62 it's only 22. If you're storing the hashes in a database, you can convert them to raw binary and save even more space (16 bytes for an MD5).

    Since the resulting hash is just a string representation, you can just use substr if you only want a bit of it (as the function does).

提交回复
热议问题