将校验和中的字符转换为整型

本文关键字:转换 整型 字符 校验和 | 更新日期: 2023-09-27 18:15:44

我正在努力创建一个方法来验证VIN号是否具有有效的校验和。有关流程的说明可以在这里找到:http://en.wikipedia.org/wiki/Vehicle_identification_number#Transliterating_the_numbers

我遇到的问题是从原始数据(作为字符串发送,目前我正在操作一个字符数组)转换成整数进行乘法。我不能只是将值转换为它们的ASCII值并对它们进行9的mod,因为从S到Z的数字与其他数字不一致。

现在我正在寻找一种稍微有效的方法来做到这一点。我的第一个想法是switch语句,但这似乎太长了。接下来我想到的是一本字典,这似乎是一种非常有效的方法。对于这个问题来说,Regex似乎过于复杂了,并且遇到了几乎和switch语句一样冗长的问题。

所以是一个变量字典vinDict的方式来做吗?我的部分直觉告诉我,有一种非常优雅的方法可以用lambda语法来做到这一点,但我对它的了解还不够好。

提前感谢您的帮助!

将校验和中的字符转换为整型

switch语句和字典将提供大致相同的性能。假设您有如下内容:

static Dictionary<char,int> CharToIntMap = new Dictionary<char,int>
{
    {'0', 0}, {'1', 1}, ... {'S', 11}, {'Z'}, 12}
};
int val = CharToIntMap[c];

或:

switch (c)
{
    case '0' : val = 0; break;
    case '1' : val = 1; break;
    ...
    case 'S' : val = 11; break;
}

如果switch语句有超过7个case,编译器将创建一个字典。有关这方面的更多细节,请参阅https://stackoverflow.com/a/8530197/56778。

现在,哪个看起来更好是一个偏好问题。我建议您编写自己的字典来完成映射。