C# 算法缩短+;10位字符串

C# 算法缩短+;10位字符串,c#,algorithm,url-shortener,C#,Algorithm,Url Shortener,我在一个项目中使用C语言。我需要为用户提供一个大的(9位以上)数字,他们将不得不重新进入另一个系统(用于以后的数据关联)。让用户输入这么大的数字(手动输入)而不出错几乎是不可能的 我一直在尝试用base64来缩短这个数字,但我找到的所有代码都将创建一个字符和数字的字符串组合。有没有一个简单的数学算法可以用来把一个大数字变小?结果应该是数字而不是字母数字。您以错误的方式解决了问题,而不是更改数字大小,而是为用户创建一种方便的复制数字的方法,一个简单的按键事件将数字复制到缓冲区,这样用户就不必写下数

我在一个项目中使用C语言。我需要为用户提供一个大的(9位以上)数字,他们将不得不重新进入另一个系统(用于以后的数据关联)。让用户输入这么大的数字(手动输入)而不出错几乎是不可能的


我一直在尝试用base64来缩短这个数字,但我找到的所有代码都将创建一个字符和数字的字符串组合。有没有一个简单的数学算法可以用来把一个大数字变小?结果应该是数字而不是字母数字。

您以错误的方式解决了问题,而不是更改数字大小,而是为用户创建一种方便的复制数字的方法,一个简单的按键事件将数字复制到缓冲区,这样用户就不必写下数字。

仅使用数字来减少数字将永远不会起作用

您真正需要的是某种形式的错误检查。 一个非常有效的方法是Verhoeff算法,它可以检测几乎所有的打字错误。网上有很多例子

比如:

您可以使用哈希算法对大数进行哈希运算,但需要处理哈希冲突。 其中一个非常容易实现的是校验和sum16:


参见sum16,您只能拥有0-65536。想想sum18?

如何将[0-9]编码为[0-9],并使用更少的位置来实现这一点?查看破折号以进行分组,并添加校验和编号。是的,您可以。它被称为uuencode/uudecode。它在unix操作系统中用于tar打包(zip)。因为ASCII是8位,而数字是4位,所以可以将数字打包成8位以获得更少的字符。uuenocode仅将字符打包为可打印字符,因此不使用ascii控制字符,也不使用128到255以上的字符。由于uuencode用于电子邮件标准,因此它位于library System.Web.Mail.MailEncoding中。UUEncode@jdweng“结果应该是数字而不是字母数字”您尝试过BCD转换吗?yournumber=>conver to byte=>BCD您将得到较短的值。您所要求的值是否可以不使用字母?使用一个简单的示例:使用较少的数字提供778的数字表示。这是不可能的…您将用完组合。嗨。不幸的是,这是不可能的科学。这些数字打印在图像上,这些图像用于在社交网络中宣传我们公司的产品。这些数字由客户通过手机以信息的形式书写。我们不想强迫他们输入复杂的文本否,Verhoeff算法只会再增加一位数,但会检测最常见的错误。只要尝试一下,就会感到惊讶。