Powershell:将唯一字符串转换为唯一整数

Powershell:将唯一字符串转换为唯一整数,powershell,Powershell,在PowerShell中是否有将唯一字符串转换为唯一整数的方法 我使用PowerShell函数作为两个API之间的服务总线, 第一个API生成唯一的代码,例如HG44X10999(varchars)-但将第一个API用作输入的第二个API只接受整数。我只关心保持它们的独特性 我已经研究了$string.gethashcode(),但是这会产生负整数,并且在构建之间也会发生变化Get hash |$string-编码ASCII显然也会输出varchars 其他例子是指将数字字符串转换为整数,即,$

在PowerShell中是否有将唯一字符串转换为唯一整数的方法

我使用PowerShell函数作为两个API之间的服务总线, 第一个API生成唯一的代码,例如HG44X10999(varchars)-但将第一个API用作输入的第二个API只接受整数。我只关心保持它们的独特性

我已经研究了
$string.gethashcode()
,但是这会产生负整数,并且在构建之间也会发生变化
Get hash |$string-编码ASCII
显然也会输出varchars

其他例子是指将数字字符串转换为整数,即,
$string=123
——但我找不到从字母数字字符串快速计算int的方法,因为它可以生成32位哈希输出,因此似乎非常适合您的目的

下面是PowerShell中的一个简单实现(偏移基础和初始素数取自wikipedia参考表中的32位输出):

现在,您可以重复地从输入字符串生成不同的整数:

PS C:\> Get-FNVHash HG44X10999
1174154724

如果目标API只接受带正负号的32位整数,则可以将模更改为
[System.Math]::Pow(2,31)
(碰撞几率加倍,以 约1/4300,用于1000个不同的输入)


要进一步了解这种简单方法,请参阅并查看第二个进程接受的INT限制是什么?只有阳性?16位、32位还是64位?第一个进程生成的字符串上的约束是什么?长度?允许在特定位置使用字符?所有字符保证可打印?所有保证为大写字母或数字?有很多方法可以实现您的目标,但是您需要知道数据的特征,如果我们想帮助您,我们也需要知道。谢谢Jeff-第二个应用程序的格式是mysql中的bigint(),php应用程序将使用它们来构建链接。我更愿意将它们保留为大小相对较小的正整数,例如int16或32。您有两个选择-1)设计一个将任意字符串转换为整数的确定性过程,但这将与您对小整数的要求相冲突,或者2)保留所有标识符分配的跟踪记录以确保始终将相同的整数重新分配给相同的输入字符串,这将需要数据库或类似的方法来跟踪它们。您是否有存储stringinteger分配的工具?仅举一个例子是不够的。如果涉及COBOL,我希望数据使用PIC子句;是AA99A99999,还是XXXXX 99999,还是XXXXXXXXX,还是什么?(在COBOL PIC中,A是一个字母,9是一个数字,X是任何字符——在讨论类似问题时,使用regexp或COBOL PIC子句都是描述数据的好方法。)没有“内置方法”,在我所知的任何语言中都没有。您需要为转换定义自己的函数,这并不困难,但您需要了解数据的特征。如果您无法找到一种描述人工生成的字母数字代码的方法,那么在不超过32位限制的情况下管理此代码的唯一方法是使用@MathiasR.Jessen.Perfect提到的数据库方法!Mathias,请更用力地定位:-)它抛出了这个错误,无法将值“2166136261”转换为类型“System.Int32”。错误:“值对于Int32太大或太小。”对于素数和偏移量,将它们声明为无符号整数
PS C:\> Get-FNVHash HG44X10999
1174154724