//Test tarjetas de credito Antonio Villanueva #include #include #include #include using namespace std; #define DIGITO ((tarjeta[index])-'0') //********************************************************************** //De derecha a izquierda ,cada posicion par se multiplica por 2 , si el resultado es mayor que 9 restamos 9 bool test(string &tarjeta){ int n(0); for (int index= (tarjeta.size()-1); (index>-1);--index){ if (index%2==0){// Suma indices pares , multiplicados *2 y si es mayor de 9 se resta 9 n+=DIGITO*2 >9 ? abs (DIGITO*2-9) :DIGITO*2; }else{//indice impar n+=DIGITO; } } return ( n%10 ? false:true);//Si el resultado es divisible por 10 es correcto } //********************************************************************** string tarjetaOk(string &tarjeta){ //Elimina espacios en blanco tarjeta.erase(remove(tarjeta.begin(),tarjeta.end(),' '),tarjeta.end()); if (tarjeta.size()!=16){return "NO";}// test 16 digitos return test(tarjeta) ? "YES":"NO"; } //********************************************************************** int main() { string card;//Tarjeta de credito int n;//N° de tarjetas a verificar cin >> n; cin.ignore(); for (int i = 0; i < n; i++) {//Cadena de caracteres tarjetas getline(cin, card); cout <