visa vencimiento vence una tarjeta sale saber parte numero leer frontal fecha donde debito cuenta cuando credito como date max credit-card billing

date - vence - numero de tarjeta y fecha de vencimiento



Año máximo en la fecha de vencimiento de la tarjeta de crédito (10)

Añadiría dinámicamente + 15-20 años al año de la fecha actual O proporcionaría una entrada de texto para el año (que personalmente encuentro más rápido para escribir los dos dígitos que para desplazarse por una lista de años).

Varios servicios en línea tienen diferentes valores para el año máximo de caducidad, cuando se trata de tarjetas de crédito.

Por ejemplo:

  • Basecamp: +15 años (2025)
  • Amazon: +20 años (2030)
  • Paypal: +19 años (2029)

¿Cuál es el máximo razonable aquí? ¿Hay alguna guía oficial?


Aquí hay un fragmento de código de Javascript que puede usar para mostrar una lista personalizable de los próximos años para la validación de CC:

var yearsToShow = 20; var thisYear = (new Date()).getFullYear(); for (var y = thisYear; y < thisYear + yearsToShow; y++) { var yearOption = document.createElement("option"); yearOption.value = y; yearOption.text = y; document.getElementById("expYear").appendChild(yearOption); }

<label for="expiration">Expiration Date</label> <span id="expiration"> <select id="expMonth" name="expMonth"> <option disabled="true">Month</option> <option value="1">Jan</option> <option value="2">Feb</option> <option value="3">Mar</option> <option value="4">Apr</option> <option value="5">May</option> <option value="6">Jun</option> <option value="7">Jul</option> <option value="8">Aug</option> <option value="9">Sep</option> <option value="10">Oct</option> <option value="11">Nov</option> <option value="12">Dec</option> </select> <select id="expYear" name="expYear"> </select> </span>


Buena llamada, @Alistair.

Aquí está la generación de mes y año en ASP.NET MVC. Agregue esto a su modelo de vista:

public IList<SelectListItem> Months = new List<SelectListItem>() { new SelectListItem() { Text="Jan", Value="01" }, new SelectListItem() { Text="Feb", Value="02" }, new SelectListItem() { Text="Mar", Value="03" }, new SelectListItem() { Text="Apr", Value="04" }, new SelectListItem() { Text="May", Value="05" }, new SelectListItem() { Text="Jun", Value="06" }, new SelectListItem() { Text="Jul", Value="07" }, new SelectListItem() { Text="Aug", Value="08" }, new SelectListItem() { Text="Sep", Value="09" }, new SelectListItem() { Text="Oct", Value="10" }, new SelectListItem() { Text="Nov", Value="11" }, new SelectListItem() { Text="Dec", Value="12" }, }; public IEnumerable<SelectListItem> Years { get { return new SelectList(Enumerable.Range(DateTime.Today.Year, 15)); } }

Y esto a su vista:

<fieldset> <legend>Card expiration</legend> <div style="float: left;"> <div class="editor-label"> @Html.LabelFor(model => model.ExpirationMonth) </div> <div class="editor-field"> @Html.DropDownListFor(model => model.ExpirationMonth, Model.Months) @Html.ValidationMessageFor(model => model.ExpirationMonth) </div> </div> <div style="float: left;"> <div class="editor-label"> @Html.LabelFor(model => model.ExpirationYear) </div> <div class="editor-field"> @Html.DropDownListFor(model => model.ExpirationYear, Model.Years) @Html.ValidationMessageFor(model => model.ExpirationYear) </div> </div> </fieldset>


Como un límite superior teórico, propongo que no necesita considerar más que la esperanza de vida esperada del titular de la tarjeta. Wikipedia hace esto en sus estándares editoriales para biografías de personas vivas :

Cualquier individuo nacido hace menos de 115 años está cubierto por esta política a menos que una fuente confiable haya confirmado la muerte de la persona. Se presume que las personas mayores de 115 años están muertas a menos que figuren en las personas mayores.

Por lo tanto, en su código, busque el año actual, agregue 115, y utilícelo como su límite superior teórico a la fecha de vencimiento de la tarjeta de crédito. Nunca más tendrás que tocar ese código.


Después de leer la validez superior de OP de 20 años para Amazon, escribí esta solución simple en PHP:

<select name=''Expiry-Year''> <option value="">yy</option> <?php for($i=0;$i<21;$i++){ echo "<option value=''".(date(''Y'')+$i)."''>".(date(''y'')+$i)."</option>/n"; } ?> </select>

Esto ha reducido en gran medida el número de solicitudes de este año nuevo para eliminar last year de un formulario.

Una versión más sencilla del bucle se ejecuta ~ dos veces más rápido:

<select name=''Expiry-Year''> <option value="">yy</option> <?php for($i=date(''Y'');$i<date(''Y'')+21;$i++){ echo "<option value=''".$i."''>".substr($i,2)."</option>/n"; } ?> </select>


Mientras que el segundo ejemplo se ejecuta dos veces más rápido que el primero, todavía obtiene la fecha y extrae el año 20 veces en vez de 40 veces. Un mejor desenrollado del bucle es:

$StartDate=date(''Y''); $EndDate=$StartDate+21; for($i=$StartDate;$i<$EndDate;$i++){ echo "<option value=''".$i."''>".substr($i,2)."</option>/n";

Eso será aproximadamente 20 veces más rápido que el ejemplo dos veces más rápido y también aborda un error menor en el código original en el sentido de que el año podría cambiar de una búsqueda de la fecha al siguiente a resultados inesperados, aunque inofensivos.


No existe una directriz oficial, ya que los emisores de tarjetas de crédito pueden elegir cada uno cuando expiran las tarjetas que emiten. De hecho, han estado emitiendo tarjetas por períodos de tiempo cada vez más largos. Si está tratando de determinar qué tan lejos en el futuro debe acomodarse a las fechas de caducidad, erró por el lado seguro y les da a sus clientes muchos años para elegir. De esa manera, usted será el responsable de su aplicación en el futuro.

Para su información, muchos emisores de tarjetas de crédito no usan la fecha de vencimiento al determinar si aprueban o no una compra con tarjeta de crédito. Entonces, si le preocupa que se proporcione una fecha incorrecta, el procesador finalmente tendrá la última palabra sobre si la transacción está aprobada o no, por lo que no me preocuparía.

Julio de 2017 : Acabo de tener un usuario final con una tarjeta que expiró hace casi 50 años.


Si desea una solución que no rinda tres dígitos en los años 2100+, debe modular la fecha, por lo tanto, debe completar con cero inicial durante xx00-xx09 años para no obtener años de un solo dígito.

Esto será muy importante a partir de 2080.

<?php for($i=0;$i<=20;$i++){ $aktDate = sprintf("%02d", ((date(''y'')+$i)%100)); echo "<option value=/"{$aktDate}/">{$aktDate}</option>/n"; } ?>


<?php $y = gmdate("Y"); $x = 20; $max = ($y + $x); while ($y <= $max) { echo "<option value=''$y''>$y</option>"; $y = $y + 1; } ?>


<script type="text/javascript"> var select = $(".card-expiry-year"), year = new Date().getFullYear(); for (var i = 0; i < 20; i++) { select.append($("<option value=''"+(i + year)+"'' "+(i === 0 ? "selected" : "")+">"+(i + year)+"</option>")) } </script>