设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2050|回复: 4
打印 上一主题 下一主题

[基础应用] [求助]如何解决单元格15位数字限制的问题?

[复制链接]
跳转到指定楼层
1#
发表于 2006-3-21 08:59:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Excel限制了单元格输入的数字只能有15位,超出的部分自动显示"0",我现在要输入的都是18位的身份证号码,请问怎样才能突破这个限制呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-3-21 15:46:00 | 只看该作者
将单元格格式设置为文本即可。

[此贴子已经被作者于2006-3-21 7:52:15编辑过]

3#
发表于 2006-3-27 16:26:00 | 只看该作者
身份证从15位转化为18位函数版!(



'根据〖中华人民共和国国家标准 gb 11643-1999〗中有关公民身份号码的规定,
'公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
'排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
'地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
'顺序码:表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
'校验码:是根据前面十七位数字码,按照iso 7064:1983.mod 11-2校验码计算出来的检验码。下面举例说明该计算方法。
'15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)
'某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:
'∑(ai×wi)(mod 11)……………………………………(1)
'公式(1)中:
'i----表示号码字符从由至左包括校验码在内的位置序号;
'ai----表示第i位置上的号码字符值;
'wi----表示第i位置上的加权因子,其数值依据公式wi=2(n-1)(mod 11)计算得出。
'i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
'ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1表
'wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
''ai×wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1
'根据公式(1)进行计算:
'∑(ai×wi) = (21 + 36 + 0 + 25 + 16 + 16 + 2 + 9 + 48 + 0 + 0 + 9 + 0 + 5 + 0 + 0 + 2) = 189
'189 ÷ 11 = 17 + 2 / 11
'∑(ai×wi)(mod 11) = 2
'然后根据计算的结果,从下面的表中查出相应的校验码,其中x表示计算结果为10:
'∑(ai×wi)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
'校验码字符值ai 1 0 x 9 8 7 6 5 4 3 2
'根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001x。
'-------------------------------------------------------------------------------
Public Function IdFunc(ByVal id As String) As String
    Dim Wi, Ai As Variant
    Wi = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1)    '表示第i位置上的加权因子,其数值依据公式wi=2(n-1)(mod 11)计算得出。
    Ai = Array("1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2")    '校验码字符值

    Dim i, j, s As Integer
    Dim newid As String

    If VBA.Len(id) <> 15 Then
        IdFunc = ""
    Else
        newid = id
        id = Left(newid, 6) & "19" & Right(newid, Len(id) - 6)
        s = 0

        For i = 0 To 16
            On Error Resume Next

            j = Mid(id, i + 1, 1) * Wi(i)
            s = s + j

        Next i

        s = s Mod 11
        IdFunc = id & Ai(s)

    End If
End Function
4#
发表于 2006-3-28 05:22:00 | 只看该作者

回复:(tuu602)[求助]如何解决单元格15位数字限制的...

也许是格式与数据有效性方面问题你可以看看是否有自定义的输入格式或数据输入有效性方面是否有限制。

最简单的方法是删除原来产单元格就可以了。
5#
发表于 2006-3-29 06:55:00 | 只看该作者
最简单的方法是在英文状态下,先输入单引号,再输入数字即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-2-23 10:36 , Processed in 0.082678 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表