2012-06-03 2 views
1

У меня есть функция javascript, которую мне нужно запустить serveride с помощью Coldfusion8.Как преобразовать функцию javascript с помощью charCodeAt в ColdFusion?

Код JavaScript функция использует charCodeAt для проверки введенных значений (ИОС, 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: прижали его вплоть до 2-й средней функции получать 1-1 = 0 на последней итерации цикла.

ответ

2

Я не совсем понимаю алгоритм здесь, но ошибка заключается в том, что вы делаете 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, поскольку значения уже число (если они не могут быть, Сверяют ввод до этого шага), а также не имеет ненужных хэшей.

+0

Просто нашел, что тоже. Плюс я также не стал теперь 10% 3 = 1 и просто сделал 10/3. – frequent