Uso del módulo PHP de dígitos de autocomprobación Modulus 11.
http://www.eclectica.ca/howto/modulus-11-self-check.php
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; }Atar convertir código php a JavaScript. Este es mi código, pero no da el resultado correcto:
<script type='text/javascript'> jQuery(document).ready(function($) { function GenMOD11F( 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 = parseInt(base_val.toString().split('').reverse().join('')); var i, sum; for ( i = 0, sum = 0; i < reversed_base_val.length; i++ ) { sum += reversed_base_val.substring(i, 1) * weight[i]; } var remainder = sum % 11; switch ( remainder) { case 0: result = base_val+0; break; case 1: result = "n/a"; break; default: var check_digit = 11 - remainder; result = base_val.check_digit; break; } return result; } }); </script>por ej. Al usar la función php
GenMOD11 (123240657) da 1232406573
Usando JavaScript GenMOD11 (123240657) da 123240657
Este código debería darte el resultado requerido.
Algunas notas:
function GenMOD11(base_val) { base_val = String(base_val); const 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 ]; const reversed_base_val = [...base_val].reverse(); let sum = 0; for(let i = 0; i < reversed_base_val.length; i++) { sum += reversed_base_val[i] * weight[i]; } const remainder = sum % 11; switch ( remainder ) { case 0: return base_val + 0; case 1: return "n/a"; default: check_digit = 11 - remainder; return base_val + check_digit; } } const testInputs = [123240657, 31, 445, 5800]; for(let input of testInputs) { console.log(`GenMOD11(${input}):`, GenMOD11(input)) } .as-console-wrapper { max-height: 100% !important; }