作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
CUSIP 是一个 9 位字母数字代码,用于唯一标识金融证券。
https://en.wikipedia.org/wiki/CUSIP
它们发明于1964年,考虑到60年代数据传输的可靠性,第9位实际上是校验位,用于确认前8个字符的有效性。有时,即使在今天,您可能会找到想要验证 CUSIP 的理由,或者公司或服务可能令人讨厌地决定只传输 8 个字符的 CUSIP,即使这违背了校验位的目的。
生成校验位的过程是:
根据非数字数字在字母表中的顺序位置加上 9(A=10,B=11,...Z=35)将非数字数字转换为值,并转换字符 *=36,@=37 , #=38.
将每个偶数位乘以 2
如果乘法的结果是两位数,则将两位数相加。 (12 = 1 + 2 = 3)
获取所有值的总和。
获取此操作的底值:(10 - (sum modulo 10)) modulo 10。
在 C# 中获取此值的最佳/最简单方法是什么?
最佳答案
public string GenerateCheckDigit(string cusip)
{
int sum = 0;
char[] digits = cusip.ToUpper().ToCharArray();
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ*@#";
for (int i = 0; i < digits.Length; i++)
{
int val;
if (!int.TryParse(digits[i].ToString(), out val))
val = alphabet.IndexOf(digits[i]) + 10;
if ((i % 2) != 0)
val *= 2;
val = (val % 10) + (val / 10);
sum += val;
}
int check = (10 - (sum % 10)) % 10;
return check.ToString();
}
编辑:
.NET Fiddle 对此进行了演示:https://dotnetfiddle.net/kspQWl
关于java - 如何生成 CUSIP 校验位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231257/
我是一名优秀的程序员,十分优秀!