
#include
main()
{
char dat
TMOD=0x20
TH1=0xfd
TL1=0xfd
TR1=1
SCON=0xd0
while(1)
{
dat++
ACC=dat
TB8=P //校验位送第九数据位TB8
SBUF=ACC
while(TI==0)
TI=0
}
}
MOV A,#待发数据 数据进了A,即刻生成校验位PMOV C,P
MOV TB8, C 校验位送到TB8
MOV SBUF, A 发送数据,以及P
上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:
MOV C,P
CPL C
MOV TB8, C 校验位送到TB8
A列为15位公民身份号码,B列{=IF(OR(A3="",LEN(A3)<>15),"",LEFT(A3,6)&"19"&MID(A3,7,6)&RIGHT(A3,3)&LOOKUP(MOD(SUM(MID(LEFT(A3,6)&"19"&MID(A3,7,6)&RIGHT(A3,3),ROW(INDIRECT("$1:$17")),1)*MOD(2^(18-ROW(INDIRECT("$1:$17"))),11)),11),{0,1,2,3,4,5,6,7,8,9,10},{1,0,"X",9,8,7,6,5,4,3,2}))}(数组公式)。你试一下!此公式目前对1900年1月1日出生的人正确,对18??年出生的不对。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)