Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Laracast13's avatar

GenMOD11 in jQuery

Hello How can I make same function in jQuery

function GenMOD11( $base_val )
{
   $result = "";
   $weight = array( 2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7 );
   $reversed_base_val = strrev( $base_val );
   for ( $i = 0, $sum = 0; $i < strlen( $reversed_base_val ); $i++ )
   {
      $sum += substr( $reversed_base_val, $i, 1 ) * $weight[ $i ];
   }
   $remainder = $sum % 11;
   switch ( $remainder )
   {
   case 0:
      $result = $base_val . 0;
      break;
   case 1:
      $result = "n/a";
      break;
   default:
      $check_digit = 11 - $remainder;
      $result = $base_val . $check_digit;
      break;
   }

   return $result;
}
0 likes
17 replies
Sinnbeck's avatar

Here let me get you started :)

function GenMOD11( base_val )
{
   var result = "";
   var weight = [ 2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7,
                    2, 3, 4, 5, 6, 7 ];
   var reversed_base_val = base_val.split('').reverse().join('');

}
Laracast13's avatar

@Sinnbeck Yes,

function GenMOD11(base_val) {
    var result;
    result = "";
    var weight;
    weight = {
        0: 2,
        1: 3,
        2: 4,
        3: 5,
        4: 6,
        5: 7,
        6: 2,
        7: 3,
        8: 4,
        9: 5,
        10: 6,
        11: 7,
        12: 2,
        13: 3,
        14: 4,
        15: 5,
        16: 6,
        17: 7,
        18: 2,
        19: 3,
        20: 4,
        21: 5,
        22: 6,
        23: 7
    };

    var reversed_base_val;
    reversed_base_val = strrev(base_val);
    var i, sum;
    __loop1:
        for (i = 0, sum = 0; i < strlen(reversed_base_val); i++) {
  
            sum += substr(reversed_base_val, i, 1) * weight[i];
        }

    var remainder;
    remainder = sum % 11;
    __loop1:
        switch (remainder) {
            case 0:
                result = base_val.0;
                break;
            case 1:
                result = "n/a";
                break;
            default:
                var check_digit;
                check_digit = 11 - remainder;
                result = base_val.check_digit;
                break;
        }
    return result;
}
Sinnbeck's avatar

@www888 Good. So which part are you in doubt in regards to? I have shown how to reverse a string.

substr()

reversed_base_val.substr(i, 1)
Laracast13's avatar

@Sinnbeck In my code getting error in this line

Uncaught SyntaxError: Unexpected number

result = base_val.0;
Sinnbeck's avatar

@www888 Yeah javascript uses + for concatenation. Be sure its a string to it does not add them as numbers

result = base_val + '0';
Laracast13's avatar

@Sinnbeck

Now this : VM2810:40 Uncaught ReferenceError: strrev is not defined

 reversed_base_val = strrev(base_val);
Laracast13's avatar

@Sinnbeck Made update, but result is not correct, php giver other result

 function GenMOD11(base_val) {
    var result;
    result = "";
    var weight;
    weight = {
        0: 2,
        1: 3,
        2: 4,
        3: 5,
        4: 6,
        5: 7,
        6: 2,
        7: 3,
        8: 4,
        9: 5,
        10: 6,
        11: 7,
        12: 2,
        13: 3,
        14: 4,
        15: 5,
        16: 6,
        17: 7,
        18: 2,
        19: 3,
        20: 4,
        21: 5,
        22: 6,
        23: 7
    };
  
    var reversed_base_val;
    reversed_base_val =  base_val.split("").reverse().join("");
    var i, sum;
    __loop1:
        for (i = 0, sum = 0; i < reversed_base_val.length; i++) {
      
            sum += reversed_base_val.substring(i, 1)  * weight[i];
        }
    
    var remainder;
    remainder = sum % 11;
    __loop1:
        switch (remainder) {
            case 0:
                result = base_val + '0';
                break;
            case 1:
                result = "n/a";
                break;
            default:
                var check_digit;
                check_digit = 11 - remainder;
                result = base_val.check_digit;
                break;
        }
    return result;
}
Sinnbeck's avatar

@www888 again

Give me an input and tell me the expected output

If i call GenMOD11('foobar') I should get what?

Laracast13's avatar

@Sinnbeck

Change it with

var reversed_base_val = base_val.toString().split('').reverse().join('');

full code

<script type='text/javascript'>
jQuery(document).ready(function($) {

 function GenMOD11(base_val) {
    var result;
    result = "";
    var weight;
    weight = {
        0: 2,
        1: 3,
        2: 4,
        3: 5,
        4: 6,
        5: 7,
        6: 2,
        7: 3,
        8: 4,
        9: 5,
        10: 6,
        11: 7,
        12: 2,
        13: 3,
        14: 4,
        15: 5,
        16: 6,
        17: 7,
        18: 2,
        19: 3,
        20: 4,
        21: 5,
        22: 6,
        23: 7
    };
  
  //  var reversed_base_val;
    var reversed_base_val = base_val.toString().split('').reverse().join('');
  //  reversed_base_val =  base_val.split("").reverse().join("");
    var i, sum;
    __loop1:
        for (i = 0, sum = 0; i < reversed_base_val.length; i++) {
      
            sum += reversed_base_val.substring(i, 1)  * weight[i];
        }
    
    var remainder;
    remainder = sum % 11;
    __loop1:
        switch (remainder) {
            case 0:
                result = base_val + '0';
                break;
            case 1:
                result = "n/a";
                break;
            default:
                var check_digit;
                check_digit = 11 - remainder;
                result = base_val.check_digit;
                break;
        }
    return result;
}
alert(GenMOD11(123240657))
});
  </script>

return - undefined

Sinnbeck's avatar

You still have a few thing to fix. Js does not automatically convert strings to integers. Use parseInt() to go from string to int.

1 like
Laracast13's avatar

@Sinnbeck Use

var reversed_base_val =  parseInt(base_val.toString().split('').reverse().join(''));
alert(GenMOD11(123240657))

result 1232406570

But this answer is not correct with php it gives 1232406573. It must add last 3 not 0. In JavaScript function not works correct.

Can you help find problem

I think problem is result = base_val + '0'; IT always adding 0

Please or to participate in this conversation.