10进制转62进制,即数字转6位字符(a-zA-Z0-9)

QQ截图20171112192624.png

常见应用场景

  • 短网址服务
  • 邀请码
  • ...

算法实现

    private static final  char[] charSet = "qwertyuiopasdfghjklzxcvbnm0123456789QWERTYUIOPASDFGHJKLZXCVBNM".toCharArray();

    /**
     * 10进制转62进制
     * @param number
     * @return
     */
    public static String hex10To62(Long number){
        Long rest=number;
        Stack<Character> stack=new Stack<Character>();
        StringBuilder result=new StringBuilder(0);
        while(rest!=0){
            stack.add(charSet[new Long((rest-(rest/62)*62)).intValue()]);
            rest=rest/62;
        }
        for(;!stack.isEmpty();){
            result.append(stack.pop());
        }
        return result.toString();
    }

    /**
     * 62进制转10进制
     * @param sixty_str
     * @return
     */
    public static String hex62To10(String sixty_str){
        Long dst = 0L;
        for(int i=0; i<sixty_str.length(); i++)
        {
            char c = sixty_str.charAt(i);
            for(int j=0; j<charSet.length; j++)
            {
                if(c == charSet[j])
                {
                    dst = (dst * 62) + j;
                    break;
                }
            }
        }
        return dst.toString();
    }

QQ截图20171112204830.png

charSet数组的顺序不同,可导致转换的结果不同。所以可能会和网上的算法结果不能通用。