Año Máximo en la Fecha de Caducidad de la Tarjeta de Crédito


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:

  • Campo base: + 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?

Author: BartoszKP, 2010-03-23

10 answers

No existe una pauta oficial, ya que los emisores de tarjetas de crédito pueden elegir cada una de ellas cuándo caducarán las tarjetas que emiten. De hecho, han estado emitiendo tarjetas durante períodos de tiempo cada vez más largos. Si está tratando de determinar qué tan lejos en el futuro debe acomodar las fechas de vencimiento, errar por el lado seguro y dar a sus clientes muchos años para elegir. De esa manera, preparas tu solicitud para el futuro.

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

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

 62
Author: John Conde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 17:48:08

Agregaría dinámicamente +15-20 años al año de la fecha actual O proporcionaría una entrada de cuadro 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).

 16
Author: Bryan Denny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-23 14:34:17

Como límite superior teórico, propongo que no es necesario considerar más de la vida útil 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 póliza a menos que una fuente confiable haya confirmado la muerte del individuo. Las personas mayores de 115 años se presumen muertas a menos que figuren en la lista de personas mayores.

Así que, en tu código, busca el año en curso, agregue 115, y use eso como su límite superior teórico a la fecha de vencimiento de la tarjeta de crédito. No tendrás que volver a tocar ese código.

 5
Author: MetaEd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 16:08:59

Buena decisión, @Alistair.

Aquí está la generación del mes y del año en ASP.NET MVC. Añade esto a tu viewmodel:

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 punto de 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>
 0
Author: Rap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-27 00:34:22

Aquí hay un fragmento de código Javascript que puede usar para mostrar una lista personalizable de los próximos años para la validación 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>
 0
Author: abd3721,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-29 14:01:15

Mientras que el segundo ejemplo se ejecuta dos veces más rápido que el primero, todavía está obteniendo la fecha y extrayendo el año de ella 20 veces en lugar de 40 veces. Un mejor desenrollamiento 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 soluciona un error menor en el código original en el que el año podría cambiar de una búsqueda de la fecha a la siguiente que conduce a resultados inesperados, aunque en este caso inofensivos.

 0
Author: user3347790,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-30 06:23:06
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
 -1
Author: Louis Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-13 10:20:30

Si desea una solución que no produzca años de tres dígitos 2100+, debe modulo la fecha, en consecuencia, debe llenar con cero inicial para 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";
    }
?>
 -1
Author: Hendrik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-28 13:36:19

Después de leer la validez superior del 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 estas solicitudes de 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>
 -2
Author: Alastair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-09 16:27:12
<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> 
 -4
Author: Rollox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-23 23:16:47