Non è che non ho capito il codice, non ho capito l'utilità!
E comunque

codice:
#include <stdio.h>

int codice(u)
char*u;
{
register i,s=0;
int l,t;

l=strlen(u); // l = lunghezza di u
for (i=0;i<l;i++) per l cicli
{
t=(u[l-i-1]-'0')*(1+((i+1)%2)); //t= carattere opposto della stringa - char '0' * 2 con i pari, 1 con i dispari
s+=(t<10 ? t:t-9); //s= s+t o s= s+t-9 a seconda..
}
return 10-s%10; //torna un numero compreso tra 1 e 10 (10-[0-9]) = [1-10]
}

int main (argc, argv)
int argc;
char*argv[];
{
while (--argc)
printf ("%d\n", codice(*++argv));
}
Avvisami se ho scritto qualche cavolata...