69 lines
3.7 KiB
XML
69 lines
3.7 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Package>
|
|
|
|
<!--生成应用序列号-->
|
|
<Function name="CreateSubac">
|
|
<Input>CITY_CD|BEG_SEQ|</Input>
|
|
<Output>SUB_AC|MSG_CD|</Output>
|
|
|
|
<Process>
|
|
<If condition="INTCMP(STRLEN($BEG_SEQ),4,10)"> <!-- 如果输入的顺序号不为10位 -->
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20062"/>
|
|
<Arg name="MsgDat" value="输入顺序号位数错误"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<If condition="INTCMP(STRLEN($CITY_CD),4,3)"> <!-- 如果输入的省代码不为3位 -->
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20062"/>
|
|
<Arg name="MsgDat" value="输入省代码位数错误"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<!-- 修改产生校验位的算法 20110204.sjb -->
|
|
<!--Set>SUM=ADD(MUL(MOD($BEG_SEQ,10),2),DIV(MOD($BEG_SEQ,100),10),MUL(DIV(MOD($BEG_SEQ,1000),100),2),
|
|
DIV(MOD($BEG_SEQ,10000),1000),MUL(DIV(MOD($BEG_SEQ,100000),10000),2),DIV(MOD($BEG_SEQ,1000000),100000),
|
|
MUL(DIV(MOD($BEG_SEQ,10000000),1000000),2),DIV(MOD($BEG_SEQ,100000000),10000000),MUL(DIV(MOD($BEG_SEQ,1000000000),100000000),2),
|
|
DIV(MOD($BEG_SEQ,10000000000),1000000000))</Set--> <!-- 奇数位不作处理,偶数位乘2后,然后再把每位处理后的结果相加 -->
|
|
<!-- 步骤1:从右边第1个数字(低序)开始每隔一位乘以2。
|
|
- 步骤2:把在步骤1中获得的乘积的各位数字与原号码中未乘2的各位数字相加。
|
|
- 步骤3:从邻近的较高的一个以0结尾的数中减去步骤2中所得到的总和〔这相当于求这个总和的低位数字(个位数)的“10的补数”〕。如果在步骤2得到的总和是以零结尾的数(如30、40等等),则校验数字就是零。-->
|
|
<Set>SUB_AC_1=STRCAT(000000,$CITY_CD,$BEG_SEQ)</Set> <!-- 不带校验位的序列号 -->
|
|
<Set>~I=19</Set> <!-- 19位序列号的位数 -->
|
|
<Set>~N=0</Set> <!-- 序列号中第~I位的值 -->
|
|
<Set>SUM=0</Set>
|
|
<While>
|
|
<Set>~N=SUBSTR($SUB_AC_1,~I,1)</Set>
|
|
<If condition="INTCMP(MOD(~I,2),3,1)">
|
|
<Set>~N=MUL(~N,2)</Set> <!-- 从右边第1个数字(低序)开始每隔一位乘以2 -->
|
|
<If condition="~N >= 10">
|
|
<Set>~N=ADD(DIV(~N,10),MOD(~N,10))</Set> <!-- 乘积的各位数字相加 -->
|
|
</If>
|
|
</If>
|
|
<Set>SUM=ADD($SUM,~N)</Set> <!-- 获得的乘积的各位数字与原号码中未乘2的各位数字相加 -->
|
|
<Set>~I=SUB(~I,1)</Set>
|
|
<If condition="~I=6"> <!-- 前6位数字为移动标识,全0不用参与计算 -->
|
|
<Break/>
|
|
</If>
|
|
</While>
|
|
<If condition="INTCMP(MOD($SUM,10),3,0)"> <!-- 如果最后一位为0 -->
|
|
<Set>CHECKCODE=0</Set>
|
|
</If>
|
|
<Else>
|
|
<Set>CHECKCODE=SUB(10,MOD($SUM,10))</Set> <!-- 如果不为0,则校验位为10与最后一位的差 -->
|
|
</Else>
|
|
<!--Set>SUB_AC=STRCAT(000000,$CITY_CD,$BEG_SEQ,$CHECKCODE)</Set--> <!-- 字符串拼接 ,其中移动标识的6位为000000?-->
|
|
<Set>SUB_AC=STRCAT($SUB_AC_1,$CHECKCODE)</Set>
|
|
|
|
<!--交易成功-->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="LPS00000"/>
|
|
<Arg name="MsgDat" value="生成应用序列号成功"/>
|
|
</Exec>
|
|
|
|
</Process>
|
|
</Function>
|
|
|
|
</Package>
|