2011-06-20 3 views
1

Je ne sais rien de javascript.Morceau une chaîne toutes les positions impaires et paires

En supposant que la chaîne « 3005600008000 », je dois trouver un moyen de multiplier tous les chiffres dans les positions numérotées impaires par 2 et les chiffres dans les positions paires par 1.

Ce code pseudo j'ai écrit sorties (je pense) TRUE pour les nombres impairs (ie « 0 »),

var camid; 
var LN= camid.length; 
var mychar = camid.charAt(LN%2); 

var arr = new Array(camid); 
for(var i=0; i<arr.length; i++) { 
    var value = arr[i]%2; 
    Alert(i =" "+value); 
} 

Je ne suis pas sûr que cela est juste: Je ne crois pas qu'il chunking/diviser la chaîne à impair (et même plus tard) positions .

Comment puis-je cela? Pouvez-vous s'il vous plaît fournir quelques conseils? Mon but est de mettre en œuvre dans une page Web une routine de validation pour un numéro d'identification de carte à puce.

La logique que je suis en train de mettre en œuvre est la suivante:

· 1) A partir de la gauche, il faut multiplier tous les chiffres dans les positions impaires par 2 et les chiffres dans les positions paires par 1.

· 2) Si le résultat d'une multiplication d'un chiffre par 2 donne un nombre à deux chiffres (par exemple "7 x 2 = 14"), ajouter les chiffres du résultat ensemble pour produire un nouveau chiffre à un chiffre résultat ("1 + 4 = 5").

· 3) Ajouter tous les résultats à un seul chiffre.

· 4) Le chiffre de contrôle est le montant que vous devez ajouter à ce résultat pour atteindre le multiple de dix suivant le plus élevé. Par exemple, si la somme à l'étape # 3 est 22, pour atteindre le multiple supérieur suivant de 10 (qui est 30), vous devez ajouter 8 à 22. Ainsi, le chiffre de contrôle est 8.

Voilà toute l'idée. Les recherches Google sur la validation de l'identifiant de la carte à puce n'ont rien donné et je commence à penser que c'est trop compliqué de le faire en Javascript ...

Toute saisie bienvenue.

+0

Je suis confus. Est-ce que ça marche ou pas? –

+0

me semble que cette boucle produira TRUE à chaque fois que l'alerte contient une assignation de variable (à une chaîne) qui va casser votre boucle car je ne vais plus itérer jusqu'à arr.length. On dirait que vous êtes nouveau à plus de javascript;). Vérifiez ma réponse pour une solution de travail – tomfumb

+0

Aussi, 0 est un nombre impair? – tomfumb

Répondre

2
var theArray = camid.split(''); // create an array entry for each digit in camid 
var size = theArray.length, i, eachValue; 
for(i = 0; i < size; i++) { // iterate over each digit 
    eachValue = parseInt(theArray[i], 10); // test each string digit for an integer 
    if(!isNaN(eachValue)) { 
    alert((eachValue % 2) ? eachValue * 2 : eachValue); // if mod outputs 1/true (due to odd number) multiply the value by 2. If mod outputs 0/false output value 
    } 
} 
1

Il semble que vous soyez en train de construire une validation Luhn. Si c'est le cas, notez que vous devez compter impair/pair à partir du DROIT et non de la gauche de la chaîne.

Questions connexes