신용 카드 유효 기간 최대 연도


149

다양한 온라인 서비스는 신용 카드와 관련하여 최대 유효 기간에 대해 다른 값을 갖습니다.

예를 들어 :

  • 베이스 캠프 : +15 년 (2025)
  • 아마존 : +20 년 (2030)
  • 페이팔 : +19 년 (2029)

여기에서 합리적인 최대 값은 얼마입니까? 공식적인 지침이 있습니까?


1
주요 온라인 상점 간의 불일치가 공식적인 지침이 없다는 것을 강력하게 지적합니다.
Matt Ball

10
나는 간단한 텍스트 입력으로 만기를 요구하는 사이트를 좋아합니다…
Quentin

1
@Quentin 사용자가 웹 브라우저 개발자를 사용하는 방법을 모르는 경우 제출을 방해하는 잘못된 검증보다 낫습니다. 도구.
Alastair

4
@Alastair — 제 의견은 냉소적으로 의도 된 것이 아닙니다.
Quentin

1
@Quention Fair로 충분합니다. 줄임표가 나를 던졌습니다. :-P 사용자에게는 분명히 가장 성가신 구현이지만 개발 / 비즈니스 관점에서 볼 때 잘못된 입력이 너무 많기 때문에 판매가 손실 될 수 있습니다.
Alastair

답변:


65

신용 카드 발급 기관이 발급 한 카드가 만료 될 때 각각을 선택할 수 있으므로 공식적인 지침은 없습니다. 실제로 그들은 오랫동안 카드를 발행 해 왔습니다. 만기일을 얼마나 멀리 잡아야하는지 결정하려는 경우, 안전한 쪽에서 실수를하여 고객에게 몇 년을 선택하십시오. 그렇게하면 나중에 응용 프로그램을 증명할 수 있습니다.

참고로, 많은 신용 카드 발급 기관은 신용 카드 구매 승인 여부를 결정할 때 만료 날짜를 사용하지 않습니다. 따라서 잘못된 날짜가 제공되는 것이 걱정된다면 프로세서는 궁극적으로 거래 승인 여부에 대한 최종 결정을 내릴 것이므로 걱정하지 않아도됩니다.

2017 년 7 월 : 거의 50 년이 지난 카드를 사용하는 최종 사용자가 있습니다.


2
올바른 코드없이 승인 될 수 있지만 올바른 코드가없는 거래에 대해 더 높은 요금이 청구될 수도 있습니다.
BVernon

AVS 및 CVV 확인에만 해당됩니다.
John Conde

대부분의 발급자가 어쨌든 거래를 승인하는 것은 사실이지만, 사용자에게 카드에 해당 연도 옵션을 제공하지 않으면 거래를 계속하지 못할 수 있습니다. 나는 단지 50 년을 더하고 발행자가 길고 약간 성가신 드롭 다운 인 경우에도 플라스틱 조각을 오랫동안 유지하려고하지 않을 것으로 기대합니다.
Mauro

16

현재 날짜에 + 15-20 년을 동적으로 추가하거나 연도에 대한 텍스트 상자 입력을 제공합니다 (개인적으로 연도 목록을 스크롤하는 것보다 두 자리 숫자를 입력하는 것이 더 빠릅니다).


7
휴대 전화를 사용하지 않는 한 당신은 몇 년 동안 슬쩍을 선호 할 수 있습니다. 고려해야 할 것.
jedmao

10
좋은 지적 @ sfjedi, 그리고 대부분의 브라우저에서 여전히 숫자를 입력 할 수 있으며 자동 선택된다는 것을 잊지 마십시오.
케빈 Wiskia

1
텍스트 입력과 선택에 대한 좋은 지적. 나는 항상 텍스트 입력을 선호했지만 최근 Android 및 iOS에서 일부 UI 테스트를 수행하면 선택 옵션이 약간 더 쉽다는 것을 알았습니다. 그러나 HTML5의 type = number를 사용하면 휴대 기기에서 숫자 키보드를 빠르게 가져 와서 작업하기도 쉽습니다. 유효성 검사 오류가 발생한다고 생각합니다. 미리 정의 된 선택 옵션을 사용하면 오류가 줄어 듭니다.
클린트 Pachl

이것이 모바일 장치에서 잘 작동하는지 확실하지 않지만 드롭 다운 / 텍스트 상자는 어떻습니까? 값을 입력하거나 평소처럼 값을 선택할 수 있습니다.
머핀 맨

4

이론 상한으로서, 카드 소지자의 예상 수명 이상을 고려할 필요는 없습니다. Wikipedia는 살아있는 사람의 전기 에 대한 편집 표준에서 이것을 수행합니다 .

신뢰할만한 소식통이 개인의 사망을 확인하지 않는 한 115 년 전에 태어난 개인은이 정책의 적용을받습니다. 115 세 이상의 사람들은 가장 나이가 많은 사람들이 목록에없는 한 사망 한 것으로 추정됩니다.

따라서 코드에서 현재 연도를 조회하고 115를 더한 다음이를 신용 카드 만료 날짜의 이론 상한으로 사용하십시오. 해당 코드를 다시 만질 필요가 없습니다.


2
나는 그것이 매우 이론적이라고 말하고 싶습니다. 오래된 카드를 가진 사람이 첫 생일과 태어난 날 사이에 발행되었을 것입니다. 그리고 그들은 115 년을 살아야했습니다!
jimp

40
네가 강한 담배를 피우는 소년!
Art

7
SWIM 은 (현재) Wikipedia의 가장 오래된 사람들 목록을 파싱하여 나이 입력 필드를 제한하여 가장 나이 max가 많은 사람이 일단 116이되면 양식을 사용하는 경우에 대비하여 나이 입력 필드를 제한하는 것이 좋은 생각 인 것 같습니다 ... : [
Alastair

개인과 반드시 ​​연결되어 있지 않은 회사 카드는 어떻습니까? 이 경우 "이론적"한계는 없습니다.
aaronbauman

3
그러나 미국 대법원에 따르면 @aaronbauman은 법인이다. 따라서 카드는 115 년 동안 만 유효해야합니다! :-)
Stonetip

1

다음은 CC 유효성 검사를 위해 다가오는 연도의 사용자 정의 가능한 목록을 표시하는 데 사용할 수있는 Javascript 코드 스 니펫입니다.

    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

다음은 미국 최고의 온라인 소매 업체의 샘플입니다.

RETAILER        WINDOW IN YEARS
Amazon          20
Walmart         10
Apple           NA (TEXT FIELD)
Home Depot      19
Best Buy        10
Target          NA (TEXT FIELD)
eBay            NA (TEXT FIELD)
Google          19

-1

잘 부탁합니다, @Alistair.

다음은 ASP.NET MVC의 월 및 연도 생성입니다. 이것을 뷰 모델에 추가하십시오.

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));
    }
}

그리고 이것은 당신의 견해에 :

<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>

-1

두 번째 예제는 첫 번째 예제보다 두 배 빠르게 실행되지만 여전히 날짜를 가져 와서 40 배가 아닌 20 배로 연도를 추출합니다. 루프를 더 잘 풀면 다음과 같습니다.

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

그것은 두 배 빠른 예제보다 약 20 배 빠르며 연도는 날짜를 한 번에서 다음으로 변경하여 예기치 않은 결과를 초래할 수있는 예기치 않은 결과로 이어질 수있는 원래 코드의 사소한 버그를 해결합니다.


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

1
위에서 언급 한 변형만으로, 월과 연도를 선택하고 드롭 다운을 선택할 수있는 연도를 추가하는 것이 좋습니다. 단일 텍스트 필드 만 표시하면 사용자는 월 및 연도 변형을 다르게 입력하는 경향이 있습니다.
루이스 페레이라

-2

2100+ 3 자리 연도를 산출하지 않는 솔루션을 원한다면 날짜를 모듈로 계산해야합니다. 따라서 한 자리 연도를 얻지 않으려면 xx00-xx09 년 동안 앞에 0을 채워야합니다.

이것은 2080 년부터 매우 중요합니다.

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

-3

아마존에 대한 OP의 최고 유효 기간 인 20 년을 읽은 후 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>

이로 last year인해 양식에서 제거하려는 새해 요청 수가 크게 줄었습니다 .

더 적은 버전의 루프는 두 번 빠르게 실행됩니다.

<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>

4
당신은 전화 date('Y')date('y')각각 20 배가 다소 느리다는 것을 알고 있습니까?
Alexis Wilke

@Alexis는 아니지만 상대적으로 두 배 빠른 실행 버전을 추가했습니다. : P
Alastair

-6
<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> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.