1

Coldfusion8 を使用してサーバー側で実行する必要がある JavaScript 関数があります。

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 ループ パラメーターを更新
ました。

4

1 に答える 1

2

ここでのアルゴリズムはよくわかりませんが、エラーはMid(string,0,1)、文字列の先頭の 1 文字前にあるため、機能しないためです。(JS は文字列を 0 からインデックス付けし、CF は 1 からインデックス付けします。)

簡単な解決策:

<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値はすでに数値であるため (そうでない可能性がある場合は、このステップの前に入力を検証してください)、不要なハッシュがないため、時間を無駄にすることはありません。

于 2012-06-03T12:00:36.660 に答える