(笔记)香港身份证BOS保存校验设置(基本校验)

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

(笔记)香港身份证BOS保存校验设置(基本校验)

保存操作新增单据合法性校验

前置条件 香港身份证: FIdType  = 'B'


参考示例:H068964(7)


校验规则: 首字母为大写,8位数字字母; 包含括号为 10位,括号内为校验码, 先把首位字母改为数字,即A为1,B为2,C为3...Z为26,再乘以8;然后把字母后面的6个数字依次乘以7、6、5、4、3、2;再将以上所有乘积相加的和,除以11,得到余数;如果整除,则括号中的校验码为0,如果余数为1,则校验码为A,如果余数为2~10,则用11减去这个余数的差作校验码。

不能有换行 全部在一行 见如下: 注意不能有中文括号
Fidno.find('(')>0 or Fidno.find(')')>0  不能含有中文括号
修改,增加判断最后校验码是否为"A”
截取字符串 不用str  否则中文特殊符号会有问题

len(GETACRONYMNEW(FIDNO,1,1))=8  and (ord(FIDNO[0])>=65 OR ord(FIDNO[0])<=90)   and  ( int(GETACRONYMNEW(fidno,1,1)[-1]) =0 if GETACRONYMNEW(fidno,1,1)[-1]<>'A'   and    ((ord(FIDNO[0])-64)*8+int(FIDNO[1])*7+int(FIDNO[2])*6+int(FIDNO[3])*5+int(FIDNO[4])*4+int(FIDNO[5])*3+int(FIDNO[6])*2)%11=0  else int(GETACRONYMNEW(fidno,1,1)[-1]) =11-((ord(FIDNO[0])-64)*8+int(FIDNO[1])*7+int(FIDNO[2])*6+int(FIDNO[3])*5+int(FIDNO[4])*4+int(FIDNO[5])*3+int(FIDNO[6])*2)%11  if GETACRONYMNEW(fidno,1,1)[-1]<>'A' and  ((ord(FIDNO[0])-64)*8+int(FIDNO[1])*7+int(FIDNO[2])*6+int(FIDNO[3])*5+int(FIDNO[4])*4+int(FIDNO[5])*3+int(FIDNO[6])*2)%11 >1 else GETACRONYMNEW(fidno,1,1)[-1]='A'  ) and GETACRONYMNEW(FIDNO,1,1)[1:7].isdigit()


解析: ord转换为ASCII码 A -65 Z- 90  a-97 z-122;


GETACRONYMNEW 函数  获取字段内容中的简体中文字符,返回首字母。本函数有三个入参,1:待取字段的标识;2:生成方式(0:忽略英文和阿拉伯数字,1:保留英文和阿拉伯数字,2:忽略英文和阿拉伯数字并保留特殊符号,4:保留英文和阿拉伯数字并保留特殊符号);3: 返回大小写:0 小写,1 大写;
eg: 首字母字段=GETACRONYMNEW(text,1,0) 标识获取标识为text 字段的中文符换转换为首字母,且保留其中缘由的英文和阿拉伯数字,返回字母为小写格式;


Fkey[2] 取索引为2 即表示第三位字符;Fkey[-1] 最后一位字符;Fkey[1:7] 取第二到第7位;


isdigit()  函数:判断是否是数字 包括非数字则为false ;


% 求余数;


(笔记)香港身份证BOS保存校验设置(基本校验)

保存操作新增单据合法性校验前置条件 香港身份证: FIdType = 'B' 参考示例:H068964(7)校验规则: 首字母为大写,8位数字字母; ...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息