public static bool CheckNumber( string number)
{
const string charcode = "0123456789A?BCDEFGHIJK?LMNOPQRSTU?VWXYZ";
int sum = 0;
for( int i = 0; i < 10; i++ )
{
string c = number.Substring( i, 1 ).ToUpper();
int idx = charcode.IndexOf( c );
if( idx == -1 || c == "?" ) return false;
idx = idx * 2 ^ i;
sum = sum + idx;
}
sum = ( sum % 11 ) % 10;
if( Convert.ToInt32( number.Substring( 10, 1 ) ) != sum ) return false;
return true;
}
该方法红色部分,哪位大侠给解析一下
位运算符不懂?你这段代码是为了实现什么功能的?
主要看是实现什么功能的
如果我没猜错的话,这就是一个简单的校验算法,传入的number应该是一个11个字符的字符串,前10个是数据位,第11个字符是校验位(也就是前10个字符串的摘要),生成这个number的地方应该也使用的了相同的运算,并把结果放在了第11个字符处,此方法用来校验该字符串的合法性,而这个运算过程通常是没有逻辑意义的数值,但跟所有的原始数据又有紧密的相关性,你可以去了解下摘要算法
而这个运算得出的结果通常是没有逻辑意义的数值