首页 新闻 会员 周边 捐助

解析位运算方法

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-01-05 09:33

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;
        }

 

 

该方法红色部分,哪位大侠给解析一下

lydiamiao的主页 lydiamiao | 初学一级 | 园豆:89
提问于:2013-01-04 22:41
< >
分享
所有回答(3)
0

位运算符不懂?你这段代码是为了实现什么功能的?

startcool | 园豆:208 (菜鸟二级) | 2013-01-04 23:08
0

主要看是实现什么功能的

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-05 09:05
0

如果我没猜错的话,这就是一个简单的校验算法,传入的number应该是一个11个字符的字符串,前10个是数据位,第11个字符是校验位(也就是前10个字符串的摘要),生成这个number的地方应该也使用的了相同的运算,并把结果放在了第11个字符处,此方法用来校验该字符串的合法性,而这个运算过程通常是没有逻辑意义的数值,但跟所有的原始数据又有紧密的相关性,你可以去了解下摘要算法

trytocatch | 园豆:373 (菜鸟二级) | 2013-01-05 09:57

而这个运算得出的结果通常是没有逻辑意义的数值

支持(0) 反对(0) trytocatch | 园豆:373 (菜鸟二级) | 2013-01-05 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册