将字符转换为Ints以获得校验和

时间:2014-07-29 20:22:50

标签: c# regex dictionary lambda checksum

我正在创建一个方法来验证VIN号是否具有有效的校验和。有关流程的说明,请访问:http://en.wikipedia.org/wiki/Vehicle_identification_number#Transliterating_the_numbers

我遇到的问题是从原始数据(作为字符串发送,当前我正在操作char数组)转换为乘法的整数。我不能只将值转换为ASCII值并将它们修改为9,因为数字S到Z与其余数字不对齐。

现在我正在寻找一种温和有效的方法来做到这一点。我的第一个想法是转换声明,但这似乎过长了。接下来我想到的是字典,这似乎是一种非常有效的方法。正则表达式似乎对问题过于复杂,并且遇到了与switch语句几乎一样冗长的问题。

那么变量Dictionary vinDict是这样做的吗?我的直觉的一部分说,使用lambda语法有一种非常优雅的方法,但我不太了解它。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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种情况,编译器将创建一个字典。有关详细信息,请参阅https://stackoverflow.com/a/8530197/56778

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