mike-north/ember-creditcard

View on GitHub
addon/utils/number-to-type.js

Summary

Maintainability
A
2 hrs
Test Coverage
export function ccNumberToType(params, hash) {
  let [num] = params;
  let result = null;
  switch (true) {
    case /^3[47]/.test(num):
      result = ['amex'];
      break;
    case /^(?:62|88)/.test(num):
      result = ['china-unionpay'];
      break;
    case /^30[0-5]/.test(num):
      result = ['dinersclub', 'dinersclub-carteblanche'];
      break;
    case /^(?:30[0-5]|309|36|3[89])/.test(num):
      result = ['dinersclub', 'dinersclub-international'];
      break;
    case /^5[45]/.test(num):
      result = ['dinersclub'];
      break;
    case /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/.test(num):
      result = ['discover'];
      break;
    case /^(?:352[89]|35[345678])/.test(num):
      result = ['jcb'];
      break;
    case /^6(?:304|706|771|709)/.test(num):
      result = ['laser'];
      break;
    case /^(?:5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)/.test(num):
      result = ['maestro'];
      break;
    case /^5019/.test(num):
      result = ['dankort'];
      break;
    case /^5[0-5]/.test(num):
      result = ['mastercard'];
      break;
    case /^(4026|417500|4405|4508|4844|4913|4917)/.test(num):
      result = ['visa', 'visa-electron'];
      break;
    case /^4/.test(num):
      result = ['visa'];
      break;
    default:
      return [];
  }
  let allowedTypes = (hash || {}).allowedTypes || '';
  let allowedTypesArr = allowedTypes ? allowedTypes.split('|') : [];
  if (allowedTypesArr.length > 0) {
    result = result.filter(typ => allowedTypesArr.indexOf(typ) >= 0);
  }
  return result;
}

export default ccNumberToType;