Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Test tarjetas de credito Antonio Villanueva
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- 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 <<tarjetaOk(card)<<endl;//"YES or NO"
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement