function strrev( str )
	{
	    var rev = "";
	    for ( var i = str.length - 1; i >= 0; i-- )
	        rev = rev + str.charAt( i );
	    return rev;
	}  //function strrev

function verhoeff_test( theValue )
	{
	
//	alert( theValue);
	var F = new Array();
 F[ 0 ] = new Array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
 F[ 1 ] = new Array( 1, 5, 7, 6, 2, 8, 3, 0, 9, 4 );
 F[ 2 ] = new Array( 5, 8, 0, 3, 7, 9, 6, 1, 4, 2 );
 F[ 3 ] = new Array( 8, 9, 1, 6, 0, 4, 3, 5, 2, 7 );
 F[ 4 ] = new Array( 9, 4, 5, 3, 1, 2, 6, 8, 7, 0 );
 F[ 5 ] = new Array( 4, 2, 8, 6, 5, 7, 3, 9, 0, 1 );
 F[ 6 ] = new Array( 2, 7, 9, 3, 8, 0, 6, 4, 1, 5 );
 F[ 7 ] = new Array( 7, 0, 4, 6, 9, 1, 3, 2, 5, 8 );
	
var Op = new Array();
 Op[0] = new Array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
 Op[1] = new Array( 1, 2, 3, 4, 0, 6, 7, 8, 9, 5 );
 Op[2] = new Array( 2, 3, 4, 0, 1, 7, 8, 9, 5, 6 );
 Op[3] = new Array( 3, 4, 0, 1, 2, 8, 9, 5, 6, 7 );
 Op[4] = new Array( 4, 0, 1, 2, 3, 9, 5, 6, 7, 8 );
 Op[5] = new Array( 5, 9, 8, 7, 6, 0, 4, 3, 2, 1 );
 Op[6] = new Array( 6, 5, 9, 8, 7, 1, 0, 4, 3, 2 );
 Op[7] = new Array( 7, 6, 5, 9, 8, 2, 1, 0, 4, 3 );
 Op[8] = new Array( 8, 7, 6, 5, 9, 3, 2, 1, 0, 4 );
 Op[9] = new Array( 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );

var Inv = new Array( 0, 4, 3, 2, 1, 5, 6, 7, 8, 9 );

	    var a = strrev( theValue );
	    var check = 0;
	    for ( var i=0; i < a.length; i++ )
	        check = Op[ check ][ F[ i % 8 ][ a.charAt( i )]];
				
			return check;
					
	   // if ( check = 0 )
		//	   return false;
	   // else
	    //   return true;
	} //function verhoeff_test

function verhoeff_compute( theValue )
	{

var F = new Array();
 F[ 0 ] = new Array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
 F[ 1 ] = new Array( 1, 5, 7, 6, 2, 8, 3, 0, 9, 4 );
 F[ 2 ] = new Array( 5, 8, 0, 3, 7, 9, 6, 1, 4, 2 );
 F[ 3 ] = new Array( 8, 9, 1, 6, 0, 4, 3, 5, 2, 7 );
 F[ 4 ] = new Array( 9, 4, 5, 3, 1, 2, 6, 8, 7, 0 );
 F[ 5 ] = new Array( 4, 2, 8, 6, 5, 7, 3, 9, 0, 1 );
 F[ 6 ] = new Array( 2, 7, 9, 3, 8, 0, 6, 4, 1, 5 );
 F[ 7 ] = new Array( 7, 0, 4, 6, 9, 1, 3, 2, 5, 8 );
	
var Op = new Array();
 Op[0] = new Array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
 Op[1] = new Array( 1, 2, 3, 4, 0, 6, 7, 8, 9, 5 );
 Op[2] = new Array( 2, 3, 4, 0, 1, 7, 8, 9, 5, 6 );
 Op[3] = new Array( 3, 4, 0, 1, 2, 8, 9, 5, 6, 7 );
 Op[4] = new Array( 4, 0, 1, 2, 3, 9, 5, 6, 7, 8 );
 Op[5] = new Array( 5, 9, 8, 7, 6, 0, 4, 3, 2, 1 );
 Op[6] = new Array( 6, 5, 9, 8, 7, 1, 0, 4, 3, 2 );
 Op[7] = new Array( 7, 6, 5, 9, 8, 2, 1, 0, 4, 3 );
 Op[8] = new Array( 8, 7, 6, 5, 9, 3, 2, 1, 0, 4 );
 Op[9] = new Array( 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );

var Inv = new Array( 0, 4, 3, 2, 1, 5, 6, 7, 8, 9 );

	    var a = "x" + strrev(theValue );
	    var check = 0;
	    for ( var i = 1; i < a.length; i++ )
	        check = Op[ check ][ F[ i % 8 ][ a.charAt( i )]];
	    return theValue + Inv[ check ];
	} //function verhoeff_compute


