栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

十进制字符串转换为多种进制(压缩字符串)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十进制字符串转换为多种进制(压缩字符串)

package com.ybjdw.base.utils;

import java.math.BigDecimal;

import com.ybjdw.base.constant.SysStaticConstData;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class TransOfNumber 
{
	private static final Logger logger = LoggerFactory.getLogger(TransOfNumber.class);

	
	public static final int TRANSFER_CYCLE_LOWERCASE = 26;
	
	public static final int TRANSFER_CYCLE_ALLCASE = 52;
	
	public static final int TRANSFER_CYCLE_NUMBER_LETTERS = 62;
	
	public static final int TRANSFER_CYCLE_NUMBER_LETTER_SYMBOLS = 76;
	
	public static byte[] hexStringToByteArray(String data) {
		int k = 0;
		if (data == null || data.length() < 1)
		{
			return null;
		}
		byte[] results = new byte[data.length() / 2];
		for (int i = 0; i < data.length();) {
			results[k] = (byte) (Character.digit(data.charAt(i++), 16) << 4);
			results[k] += (byte) (Character.digit(data.charAt(i++), 16));
			k++;
		}
		return results;
	}
	
	
	public static String bytesToHexString(byte[] src){
	    StringBuilder stringBuilder = new StringBuilder("");
	    if (src == null || src.length <= 0) {
	        return null;
	    }
	    for (int i = 0; i < src.length; i++) {
	        int v = src[i] & 0xFF;
	        String hv = Integer.toHexString(v);
	        if (hv.length() < 2) {
	            stringBuilder.append(0);
	        }
	        stringBuilder.append(hv);
	    }
	    return stringBuilder.toString();
	}
	
	public static BigDecimal decimalRoundUp2(BigDecimal decimal)
	{
		 return decimal.setScale(2, BigDecimal.ROUND_UP);
	}
	
    
    public static String decToBigSys(String decStr, int system) {
    	if (StringUtils.isBlank(decStr)) {
    		return null;
    	}
    	// 如果长整形能处理,尽量不用BigDecimal
    	if (decStr.length() < 19) {
    		return decToBigSys(Long.parseLong(decStr), system);
    	}
    	
    	BigDecimal bigDecimal = new BigDecimal(decStr);
    	String str = getbaseStr(system);
        int scale = str.length(); //转化目标进制
        StringBuilder s = new StringBuilder();
        if(bigDecimal.compareTo(new BigDecimal(0)) == 0)
        {
            return str.charAt(0)+"";
        }
        bigDecimal = bigDecimal.abs();
        while(bigDecimal.compareTo(new BigDecimal(0)) > 0){
            if(bigDecimal.compareTo(new BigDecimal(scale)) < 0){
            	int index = bigDecimal.intValue();
            	 s.insert(0, str.charAt(index));
            	 bigDecimal = new BigDecimal(0);
            }else{
            	BigDecimal [] results = bigDecimal.divideAndRemainder(new BigDecimal(scale));
                s.insert(0, str.charAt(results[1].intValue()));
                bigDecimal  = results[0];
            }
        }
        return s.toString();
    }
    
    
    public static String decToBigSys(long decimal, int system) {
        String str = getbaseStr(system);
        int scale = str.length(); //转化目标进制
        StringBuilder s = new StringBuilder();
        if(decimal == 0)
        {
            return str.charAt(0) + "";
        }
        while(decimal > 0){
            if(decimal < scale){
            	int index = (int) decimal;
            	 s.insert(0, str.charAt(index));
            	 decimal = 0;
            }else{
                int r = (int) (decimal % scale);
                s.insert(0, str.charAt(r));
                decimal  = (decimal - r) / scale;
            }
        }
        return s.toString();
    }

    
    
    public static String bigSysToDec(String bigSys, int system)
    {
    	String str = getbaseStr(system);
        int scale = str.length(); //转化目标进制
        BigDecimal decimal = new BigDecimal(0);
    	
    	char[] dataChars = bigSys.toCharArray();
    	for (int i = 0; i < dataChars.length; i++)
    	{
    		long num = StringUtils.indexOf(str, dataChars[i]);
    		if (i == 0 && dataChars[i] == '0')
    		{
    			continue;
    		}
    		decimal = decimal.add(new BigDecimal(num).multiply(new BigDecimal(scale).pow(dataChars.length - i - 1)));
    	}

    	return decimal.toString();
    }
    
    public static long bigSysToLongDec(String bigSys, int system)
    {
    	if (StringUtils.isBlank(bigSys)) {
        	return 0;
    	}
    	String decStr = bigSysToDec(bigSys, system);
    	if (decStr != null && decStr.length() < 19) {
    		return Long.parseLong(decStr);
    	} else {
    		return -1;
    	}
    }

    
    private static String getbaseStr(int system)
    {
        switch(system) {
        case 26:
        	return "abcdefghijklnmopqrstuvwxyz";
        case 52:
        	return "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        case 62:
        	return "ABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";

        case 76:
        	return "ABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-=";
        default :
        	return "abcdefghijklnmopqrstuvwxyz";
        }
    }

    public static String getUserIdByCode(String userCode){
    	try{
			String recommendUserId = TransOfNumber.bigSysToDec(userCode, 62);
			for (int i = recommendUserId.length(); i < SysStaticConstData.SQL_ID_LENGTH; i++) {
				recommendUserId = "0" + recommendUserId;
			}
			return recommendUserId;
		}catch (Exception e){
			logger.error("通过code获取userId失败!", e);
		}
		return null;
	}

    public static void main(String[] args)
	{
		String numStr = "100001016282207063650000";
		// 10进制字符串转换为62进制,压缩
		String productCry = decToBigSys(numStr, 62);
		System.out.println(productCry);
		// 62进制转变回10进制
		System.out.println(bigSysToDec(productCry, 62));
		System.out.println(numStr);
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号