A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

让用户输入身份证号码,如何检验是合法的.
强制转换为int类型就会出错,因为超出了int数据范围.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

8 个回复

正序浏览
肖琦 中级黑马 2012-7-17 08:33:37
8#
同样是讨论身份证号码的

链接上是另一个帖子的,上面有讨论过;

其实搞清楚身份证的验证,就是要了解身份证的组成,以及效验码的算法,以上帖子都有说过,可以参考。
回复 使用道具 举报
上面的有误,用这个:^d{17}[\d|X]|\d{15}$

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
用正则表达式 ^\d[0,9]{18}$
回复 使用道具 举报
身份证号一般都是字符串类型,
验证匹配的话,用正则表达式

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙毅 于 2012-6-10 09:47 编辑

身份证的数据类型使用字符串即可,对它没有计算操作不必转换为int
如何检验是否合法,这里可以使用正则表达式,例(js):
<script type="text/javascript">
        window.onload = function () {
            var regId = /\d{17}[\d|X]|\d{15}/;
            if (regId.test("身份证号")) {
                alert("验证成功");
            }
            else {
                alert("验证失败");
            }
        }
    </script>
具体元字符含义到网上查一下相关解释

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你身份证都是用string类型,还有手机号码也是  ,int是9位,身份证转成int  对比没有实际意思

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
{:soso_e136:}不用把十八位数字转换成int呀,
判断长度,直接判断字符长度 string.length   
分别想要判断地区 、出生年月日、还有那个啥排序的、男的女的,
就用string的相关函数截取string部分再转换成int进行判断

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
身份证号码,一般都是 18位 整数, 这样的话,  就目前的 整数类型, 我们要 18 位有效数字 的话 , 好像除了 decimal 其余的数都没有这个精度。。
所以,我觉得不应该把 身份证号码考虑为 整数 类型, 而应该考虑为字符串类型,, 然后,我们可以把 此 字符串分为 3部分, 分别检验 ;;
前2部分 必须能转化为 整数类型,, 最后一部分的 最后一位数 允许 为X,, 这样应该就能解决你的问题了。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马