算身份证最后一位--转贴佛吉亚
今天遇到一个问题,根据身份证的前十七位算出第十八位,这个有明确的算法,如下所示:
∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
i----表示号码字符从右至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi---表示每一位对应的加权值。
从左到右Wi的值依次为:
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
然后根据公式(1)计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:
公式计算结果 0 1 2 3 4 5 6 7 8 9 10
校验码字符值 1 0 X 9 8 7 6 5 4 3 2
这个算法实现起来倒是挺简单的,用X++里的Container比较顺手:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
当然这里没有检查每一个字符是不是有效数字。