Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"parserOptions": {
"ecmaVersion": 6
},
"rules": {
"keyword-spacing": 1,
"space-before-function-paren": [1, "never"],
"eqeqeq": 1,
"space-infix-ops": 1,
"comma-spacing": 1,
"brace-style": 1,
"no-multiple-empty-lines": 1,
"camelcase": 1,
"func-call-spacing": 1,
"key-spacing": 1,
"semi": 1,
"no-floating-decimal": 1,
"no-multi-spaces": 1,
"object-property-newline": 1,
"padded-blocks": [1, "never"],
"space-before-blocks": 1,
"space-in-parens": 1,
"spaced-comment": 1,
"quotes": [1, "single"],
"id-length": [1, { "exceptions": ["i", "j", "x"] }],
"indent": [1, 2],
"no-array-constructor": 1
}
}
96 changes: 58 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,58 @@
# Tarjeta de crédito válida

Crea una web que pida, por medio de un `prompt()`, el número de una tarjeta de
crédito y confirme su validez según el [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn).
Lee este blog que explica [cómo funciona el algoritmo de Luhn](http://www.quobit.mx/asi-funciona-el-algoritmo-de-luhn-para-generar-numeros-de-tarjetas-de-credito.html).

## Entregables

Para cada producto debes entregar **un repositorio de GitHub** que
contenga:
1. Archivo `README.md` que explique el **pseudocódigo** de tu solución y su
**diagrama de flujo**
2. Archivo `app.js` con el **código** de tu solución
3. Archivo `index.html` vinculado con tu `app.js`

## Tips

A continuación un video de Michelle que te lleva a través del algoritmo de
Luhn y te da tips para completar este proyecto:

[![tips credit card](https://img.youtube.com/vi/f0zL6Ot9y_w/0.jpg)](https://www.youtube.com/watch?v=f0zL6Ot9y_w)

## Consideraciones específicas

1. Tu código debe estar compuesto por 1 función: `isValidCard`
2. El usuario no debe poder ingresar un campo vacío

## Criterios de evaluación

Se tomarán en cuenta las siguientes consideraciones a la hora de evaluar tu solución:

1. Nombramiento de variables
2. Indentación
3. Validación de input: el usuario no debe poder ingresar un campo vacío o de tipo que no corresponda
4. Estructura de tus archivos
5. Archivo `README.md` correctamente redactado
6. Uso de comentarios para hacer tu código más legible
7. Que el programa cumpla con el propósito requerido
## Validación de Tarjetas
La siguiente web ha sido diseñada para validar el número de una tarjeta de crédito o débito, según el algoritmo de Luhn.
Más información sobre el algoritmo de Luhn en el siguiente link: [Algortimo_Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn)

Diagrama de flujo :
![Sin titulo](assets/docs/validacard.png "Validar tarjeta")

La web esta conformada por una página principal llamada Index.html, en la cual ejecuta la función llamada **isValidCard** alojada en el archivo app.js.

La página obtiene la entrada de datos mediante un **prompt** .
### Especificaciones de la función isValidaCard

Para la función **isValidCard** se implemento lo siguiente :

* Crear una variable **num** con valor obtenido mediante un prompt ("Ingrese número de tarjeta").
* Validar si el valor ingresado son solo números y el campo no debe estar vacio.
```javascript
do{
var num= prompt("Ingrese número")
}
while (!num || !/^([0-9])*$/.test(num));
```
* Crear dos variables que alojaran valores de mensaje y el acumulador sum :
```javascript
var message='';
var sum =0;
```
* Convertir el valor **num** en un arreglo con los digitos separados. Esto mediante split('') y asignarle una variable.
```javascript
var arrayCard=num.split('');
```
* Revertir el orden de los dígitos dentro del arreglo.
```javascript
var arrayReverse = arrayCard.reverse();
```
* Recorrer los dígitos mediante un for, para validar cada dato.
* Si el dígito ocupa una posición impar :
* Convertirlo a número y multiplicarlo por 2.
* Luego validar si este nuevo resultado es >=10
* Si es asi:
* separar los digitos
* Sumar los digitos
* Reemplazar la suma sobre el valor incialmente elegido.

* Si No es asi :
* Reemplazar el número obtenido sobre el valor inicial.
* Si el dígito no ocupa una posición impar lo salta y pasa al siguiente.
* Convertir los elementos del arreglo que no han sido modificados en números.
* Sumar todos los elementos del arreglo y alojar el resultado en la variable suma.
* Validar según la siguiente condición :
* Si
```javascript
sum%10==0 ? message = "válido" : message = "inválido"
```
* Mostrar mensaje "válido"
* Sino
* Mostrar mensaje " Inválido"
* Mostrar el mensaje en la página web
Binary file added assets/docs/validacard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>Validación</title>
</head>

<body>
<h1>Validación de tarjeta</h1>
<script type="text/javascript" src="js\app.js"></script>
</body>

</html>
40 changes: 40 additions & 0 deletions js/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
function isValidCard() {
do {
var num = prompt('Ingrese número');
}
while (!num || !/^([0-9])*$/.test(num)); // valida que solo ingrese números y no esta vacio


var message = '';
var sum = 0;

var arrayCard = num.split(''); // separar los digitos y colocarlos en un array
var arrayReverse = arrayCard.reverse(); // revertir el arreglo

for (i = 0;i < arrayReverse.length; i++) {
if (i % 2 !== 0) { // si la posición es impar
var elementSelection = parseInt(arrayReverse[i]) * 2; // multiplicar por 2
if (elementSelection >= 10) { // validar el resultado es >=10
var digitInitial = parseInt(elementSelection / 10); // separar los digitos
var digitFinal = elementSelection % 10;
var elementFinal = digitInitial + digitFinal; // sumar los digitos
arrayReverse[i] = elementFinal; // reemplazar por el valor inicial
} else { // si el valor es menor que 10
var otherElement = parseInt(arrayReverse[i]) * 2; // multiplicar por 2
arrayReverse[i] = otherElement; // reemplazar el valor
}
}
}

for (j = 0;j < arrayReverse.length;j++) {
sum += parseInt(arrayReverse[j]); // sumar todos los elementos del array
}

sum % 10 === 0 ? message = 'válido' : message = 'inválido'; // si la suma es multiplo de 10 o no devolver el mensaje especificado


return document.write('El número de tarjeta ' + num + ' es ' + message); // mostrar en la pagina web
}


isValidCard();