36进制_36位进制转换

36进制_36位进制转换短网址服务就是把长的URL地址转换成短的URL。如google提供的http://goo.gl/短网址http://goo.gl/mwsQP 对应的网址就是http://www.cnblogs.com/zjfree短网址参考:http://baike.baidu.com/view/2693499.h

36进制_36位进制转换"

短网址服务就是把长的URL地址转换成短的URL。如google提供的http://goo.gl/

短网址 http://goo.gl/mwsQP 对应的网址就是 http://www.cnblogs.com/zjfree

短网址参考:http://baike.baidu.com/view/2693499.htm

那为什么URL那么多怎么就可以使用5位字符就表示呢? 注意短网址后面的5位字符是区分大小写的。

如果五个字符是(0-9)、(A-Z)、(a-z),那5位字符可以穷举多个呢?62^5 = 916132832个 如果6位呢?62^6 = 56800235584个 500多亿个网址。

这实际上是一个62进制的数字!那么在现实的应用中经常有缩短业务单号的需求,为什么不使用这种办法呢?为了方便输入我们不区分大小写。

我们使用(0-9)、(A-Z) 这样就得到了一个36进制的数字。它能表示多少信息呢?

进制说明

10进制是 0-9 (0123456789)
16进制是 0-F (0123456789ABCDEF)
36进制是 0-F (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)

信息量计算 多少位就是36的多少次方。

1位时 36^1 = 36
2位时 36^2 = 1296
3位时 36^3 = 46656
4位时 36^4 = 1679616
5位时 36^5 = 60466176
6位时 36^6 = 2176782336
7位时 36^7 = 78364164096

10进制和36进制互转代码

/// <summary>
/// Convert36 的摘要说明
/// </summary>
public class Convert36
{
	public Convert36()
	{
		//
		// TODO: 在此处添加构造函数逻辑
		//
	}

	private const string BASE_CHAR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

	/// <summary>
	/// 转换为段字符
	/// </summary>
	/// <param name="num"></param>
	/// <param name="length"></param>
	/// <returns></returns>
	public static string GetShortNo(int num, int length)
	{
		string str = "";
		while (num > 0)
		{
			int cur = num % BASE_CHAR.Length;
			str = BASE_CHAR[cur] + str;
			num = num / BASE_CHAR.Length;
		}
		if (str.Length > length)
		{
			str = str.Substring(str.Length - length);
		}
		else
		{
			str = str.PadLeft(length, '0');
		}

		return str;
	}

	/// <summary>
	/// 解析段字符
	/// </summary>
	/// <param name="strNo"></param>
	/// <returns></returns>
	public static int GetShortNum(string strNo)
	{
		int num = 0;
		for (int i = 0; i < strNo.Length; i++)
		{
			num += BASE_CHAR.IndexOf(strNo[i]) * (int)Math.Pow(BASE_CHAR.Length, strNo.Length - i - 1);
		}

		return num;
	}
}

实例分析

原订单号组成规则 1010101001 {年}{月}{日}{一天流水号} 长度为10位 它可表示00-00-00 到 99-12-31 (100年 约36500天)的时间 和一天内9999个订单不重复

而使用36进制 {前3位表示日期}{后三位表示流水号} 长度6位 可表示46656天(约128年) 46656个流水号

今天的文章36进制_36位进制转换分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/49326.html

(0)
编程小号编程小号
上一篇 2023-09-03
下一篇 2023-09-03

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注