易表在线答疑技术与交流用户社区 → [求助]向各位版主求教,一段js代码校验集装箱箱号是否正确的,想用易表的函数重构。


  共有11965人关注过本帖树形打印复制链接

主题:[求助]向各位版主求教,一段js代码校验集装箱箱号是否正确的,想用易表的函数重构。

帅哥哟,离线,有人找我吗?
jynet
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
[求助]向各位版主求教,一段js代码校验集装箱箱号是否正确的,想用易表的函数重构。  发帖心情 Post By:2007/9/21 21:25:00 [显示全部帖子]

各位版主大家好,我在做一套系统的时候需要实现一个功能,就是校验集装箱箱号是否正确,在网上看了相关算法并找到了一段js代码,想用易表的函数重构,但是易表好像没有数组和子函数功能,苦思良久仍无进展,特来向各位版主求救,先行拜谢。
[code]// JavaScript Document
function changechar(str)
{
 
   if ((str=="a")||(str=="A"))
   return 10;
   else if ((str=="b")||(str=="B"))
   return 12;
       else if ((str=="c")||(str=="C"))
   return 13;
       else if ((str=="d")||(str=="D"))
   return 14;
       else if ((str=="e")||(str=="E"))
   return 15;
       else if ((str=="f")||(str=="F"))
   return 16;
       else if ((str=="g")||(str=="G"))
   return 17;
       else if ((str=="h")||(str=="H"))
   return 18;
       else if ((str=="i")||(str=="I"))
   return 19;
       else if ((str=="j")||(str=="J"))
   return 20;
       else if ((str=="k")||(str=="K"))
   return 21;
       else if ((str=="l")||(str=="L"))
   return 23;
       else if ((str=="m")||(str=="M"))
   return 24;
       else if ((str=="n")||(str=="N"))
   return 25;
       else if ((str=="o")||(str=="O"))
   return 26;
       else if ((str=="p")||(str=="P"))
   return 27;
       else if ((str=="q")||(str=="Q"))
   return 28;
       else if ((str=="r")||(str=="R"))
   return 29;
       else if ((str=="s")||(str=="S"))
   return 30;
       else if ((str=="t")||(str=="T"))
   return 31;
       else if ((str=="u")||(str=="U"))
   return 32;
       else if ((str=="v")||(str=="V"))
   return 34;
       else if ((str=="w")||(str=="W"))
   return 35;
       else if ((str=="x")||(str=="X"))
   return 36;
       else if ((str=="y")||(str=="Y"))
   return 37;
       else if ((str=="z")||(str=="Z"))
   return 38;
       else
   return -1000;
//if ((str=="a")||(str=="A"))
//return 10;
//else if (str=="b")
//return 1;
//else
//return 7;
}
function GetCntr(strcntr)
{
   var num = new Array(10)
   for (i=0;i<11;i++)
   {
       num[i]=0;
   }
   test=strcntr;//prompt("请输入需校验的集装箱编码","◎◎◎◎×××××××")
   len=test.length;
   if (len != 11)
   {
       alert("请重新输入11位的集装箱编码!");
       return false;
   //location.reload();
   }
   else

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 21:44:00 [显示全部帖子]

[这个贴子最后由jynet在 2007/09/21 10:04pm 第 1 次编辑]

感谢C版的热情回复,其实就是对字段“集装箱编号”进行校验,理论上用行验证公式可以做到,但是集装箱的验证规则很麻烦,搞了好几天,我头都大了。具体验证规则是这样:集装箱号由4位公司代码和7位数字组成,其中第七位数字就是校验码。首先将公司代码转换为数字,去掉11及其倍数,连加除以11,其余数为校验位。 A=10 B=12 C=13 D=14 E=15 F=16 G=17 H=18 I=19 J=20 K=21 L=23 M=24
N=25 O=26 P=27 Q=28 R=29 S=30 T=31 U=32 V=34 W=35 X=36 Y=37 Z=38

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 22:06:00 [显示全部帖子]

需要验证的东西有是否共为11位、前四位是否为字母、后七位是否为数字、然后用上面js中的这个算法:“num[0]+num[1]*2+num[2]*4+num[3]*8+num[4]*16+num[5]*32+num[6]*64+num[7]*128+num[8]*256+num[9]*512”求和并除以11;其中前4位还需要转换为相应的字母所对应的值,最后用这个值同最后一位也就是第11位进行校验。求czy版主帮帮我啊。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 22:08:00 [显示全部帖子]

3位版主都来了,真是受宠若惊啊,万分感谢各位的关怀和关注,也恳请各位帮我想想办法,哪怕是思路点拨也万分感谢。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 23:09:00 [显示全部帖子]

感谢c版,我在论坛搜到了这帖:http://bbs.egridsoft.com/dispbbs.asp?boardid=1&star=3&replyid=263886&id=42654&skin=0&page=1
刚好符合我的要求,答案在最后一楼。
看来易表的灵活性真的是堪称一流啊,我一定要更加努力的学习易表的相关函数、并常来论坛学习上乘的设计思路,与大家一起进步,祝各位版主顺遂、祝易表的事业蒸蒸日上。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 23:20:00 [显示全部帖子]

不懂老师的公式更为简洁、易懂,谢谢了。
我也没有找到程版文件中的公式哦,不过还是非常感谢您的热心。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 23:23:00 [显示全部帖子]

下面引用由ylm2007/09/21 11:20pm 发表的内容:
你的规则不对的:
集装箱校验码算法如下:
  集装箱编号共11位,前四位是字母,最后一位为校验码,举例如◎◎◎◎×××××××。
  字母取数值规则为:A=10,B至K依次取12至21,L至U依次取23至32,V至Z依 ...

其中第七位数字就是校验码,是指从数字第一位数到第7位,还是最后一位。我没写明白不好意思。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/21 23:31:00 [显示全部帖子]

下面引用由程兴刚2007/09/21 11:28pm 发表的内容:
1、集装箱码列有个操作公式;
2、验证结果列有个刷新公式!

没找到集装箱码列,这个是住院管理系统,程版可能真的发错文件了。。。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/22 3:07:00 [显示全部帖子]

[这个贴子最后由jynet在 2007/09/22 04:04am 第 1 次编辑]

下面引用由czy2007/09/21 11:47pm 发表的内容:
程版也忽视了18楼提到的判断。
在不懂大师的文件中增加了上述判断。

很完美了,万分感谢各位版主的帮助。
我把列x的操作公式改为:“if([%B%]= False Or Number(right([箱号编码],1)) <> [较验码] ,MsgBox("数据不符!",0), True )”但是如果验证码不对的话会弹出2次提示框提示数据不符!,这是为什么呢?我只想让他弹出一次提示就好,再次求教。

-=-=-=- 以下内容由 jynet2007年09月22日 03:09am 时添加 -=-=-=-
或者有无其他办法验证箱号编码的最后一位是否与校验码相符?

-=-=-=- 以下内容由 jynet2007年09月22日 04:01am 时添加 -=-=-=-
C版的文件中用变量判断,可能是有重复判断的情况发生,可不可以不要校验码列和辅助列也不要变量。把所有变量和公式写在一起,用在箱号编码列的操作公式中按先后顺序计算、判断一条龙呢?这样就不容易出现重复计算的情况咯,我自己也试试,还想麻烦各位大侠帮我也想想,其实帮我这么多,我已经不好意思了,各位看吧,有空的话帮我再想想,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
jynet
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:39 积分:0 威望:0 精华:0 注册:2007/9/8 4:35:00
  发帖心情 Post By:2007/9/22 15:09:00 [显示全部帖子]

下面引用由ylm2007/09/22 10:11am 发表的内容:
不要辅助列可以,用操作公式也行的,但不要变量似乎不行(函数嵌套问题)
这个列子用操作公式验证,或用录入窗口自定义按扭也可以:

不愧为大师级的人物,真正的完美,爱死你了不懂老师。
建议不懂老师写几篇教大家对一个问题或多个问题的实现进行分析并构成思路的方法以及如何调试、除错的技巧。因为每次看不懂老师的作品都觉得很艺术,在代码效率、实现方法等方面都是远非我等菜鸟能及的,是一种享受,好想跟老师好好学学“渔”术,因为总是来问各位要鱼,不是很不好意思?

 回到顶部
总数 11 1 2 下一页