Foxwx微信公众号管理软件---同心软件 -以高级编程语言进行微信公众号管理,我们一直在努力!

中国大陆18位身份证号码校验函数

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

* 程序:中国大陆18位身份证号码校验函数

* 作者:宋祎礽

* 公司:SYRSOFT(R) 上海 中国

* 版权所有(C)宋祎礽 保留所有权利

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

* 语法:IdVerify(cExpression [,nModel])

* 参数:

* cExpression

* 指定要校验的18位身份证号。若cExpression参数缺省或为空字符串

* 或为非18位身份证号,则返回逻辑.F.值。

* nModel

* 指定返回值类型。若nModel参数缺省或为0,则返回值为逻辑型,表

* 示校验码是否正确;1 则返回值为字符型,表示正确的校验码。

* 返回值类型:逻辑型、字符型

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **


FUNCTION IdVerify

 PARAMETERS cIdNumber,nModel


 LOCAL lcCorrect,cVerify,nSummary,i

 LOCAL ARRAY aPosition(17)


 lcCorrect=.F.


 IF TYPE('cIdNumber')#'C' &&若证件号参数类型不符

  RETURN lcCorrect

 ELSE

  IF LEN(cIdNumber)#18 &&若非18位身份证号

   RETURN lcCorrect

  ENDIF

 ENDIF


 IF TYPE('nModel')#'N' &&检查并纠正模式参数

  nModel=0

 ELSE

  IF BETWEEN(nModel,0,1)=.F.

   nModel=0

  ENDIF

 ENDIF


 *定义加权因子数组*

 aPosition(1)=7

 aPosition(2)=9

 aPosition(3)=10

 aPosition(4)=5

 aPosition(5)=8

 aPosition(6)=4

 aPosition(7)=2

 aPosition(8)=1

 aPosition(9)=6

 aPosition(10)=3

 aPosition(11)=7

 aPosition(12)=9

 aPosition(13)=10

 aPosition(14)=5

 aPosition(15)=8

 aPosition(16)=4

 aPosition(17)=2


 cVerify='10X98765432' &&定义对应校验码变量


 nSummary=0

 FOR i=1 TO 17

  nSummary=nSummary+VAL(SUBSTR(cIdNumber,i,1))*aPosition(i)

 ENDFOR


 DO CASE

  CASE nModel=0 &&验证校验码模式

   IF UPPER(RIGHT(cIdNumber,1))=SUBSTR(cVerify,MOD(nSummary,11)+1,1)

    lcCorrect=.T.

   ELSE

    lcCorrect=.F.

   ENDIF


  CASE nModel=1 &&请求校验码模式

   lcCorrect=SUBSTR(cVerify,MOD(nSummary,11)+1,1)

 ENDCASE


 RETURN lcCorrect

ENDFUNC


2019年7月18日 | 发布:admin | 分类:程序开发 | 评论:0

发表留言: