【问题标题】:how to convert a javascript function using charCodeAt to Coldfusion?如何将使用 charCodeAt 的 javascript 函数转换为 Coldfusion?
【发布时间】:2012-06-03 09:43:34
【问题描述】:

我有一个 javascript 函数,我需要使用 Coldfusion8 运行服务器端。

javascript 函数使用 charCodeAt 检查输入的值(ILN,13 位值,例如 1234567891231)并计算 checkVal:

checker=0;
for (i=11; i>0; i=i-2){
    checker += (iln.charCodeAt(i)-48)*3;
    checker += iln.charCodeAt(i-1)-48;
    }
checkVal = 10 - (checker%10);
if(checkVal==10){
    checkVal=0;
    }
if(checkVal != iln.charAt(12)){
    alert("error, should be" + checkVal);
    }

在 Coldfusion 中,我尝试使用循环、mid() 和 asc() 来执行此操作,但我无法让它工作。这是我所拥有的:

<cscript>
    var checkValue = 1234567891231;        
    var done = "";
</cscript>
<cfloop from="11" to="1" index="i" step="-2">    
    <cfscript>
        check = check +   (ASC(MID(checkValue,#i#,1))-48)*3;
        check = check +   ASC(MID(checkValue,(#i#-1),1))-48;
    </cfscript>
</cfloop>
<cfset done = 10 - check/10>
<cfif done EQ 10><cfset done = 0></cfif>
<cfif done NEQ mid(checkValue,12,1)>
    <cfscript>
// error handler 
    </cfscript>
</cfif>

值正确传递,但我的 ASC(MID()) 产生错误,我还没有发现我做错了什么。

谁能给我指点一下?

谢谢!

EDIT:更新的 CF 循环参数
EDIT2:将其固定到第二个中间函数,在最后一次循环迭代中获得 1-1=0。

【问题讨论】:

    标签: javascript coldfusion character-encoding


    【解决方案1】:

    我不太了解这里的算法,但错误是因为您正在执行Mid(string,0,1) - 这是字符串开头的一个字符,因此不起作用。 (JS 从零开始索引字符串,CF 从一开始索引。)

    简单的解决方案:

    <cfloop from="11" to="1" index="i" step="-2">
        <cfset check += mid(checkValue,i,1) * 3 />
    </cfloop>
    <cfloop from="10" to="2" index="i" step="-2">
        <cfset check += mid(checkValue,i,1) />
    </cfloop>
    

    Asc 不会浪费时间,因为这些值已经是数字(如果可能不是,请在此步骤之前验证输入),并且也没有不必要的哈希。

    【讨论】:

    • 刚刚也发现了。另外,我现在也没有 10%3=1,只是做了 10/3。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多