function cc_gen() {
   var pos;
   var str = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
   var sum = 0;
   var final_digit = 0;
   var t = 0;
   var len_offset = 0;
   var len = 0;
   var issuer;

   // Fill in the first values based on the specified bank

   // Visa
   if ((document.getElementsByName('cardissuer'))[0].checked) {
      str[0] = 4;
      pos = 1;
      if ((document.getElementsByName('visa_length'))[1].checked)
         len = 16; 
      else
         len = 13;
   }
   // Mastercard
   else if ((document.getElementsByName('cardissuer'))[1].checked) {
      str[0] = 5;
      t = Math.floor(Math.random() * 5) % 5;
      str[1] = 1 + t; //Between 1 and 5
      pos = 2;
      len = 16;
   }
   // American Express
   else if ((document.getElementsByName('cardissuer'))[2].checked) {
      str[0] = 3;
      t = Math.floor(Math.random() * 4) % 4;
      str[1] = 4 + t; //Between 4 and 7
      pos = 2;
      len = 15;
   }
   // Discover
   else if ((document.getElementsByName('cardissuer'))[3].checked) {
      str[0] = 6;
      str[1] = 0;
      str[2] = 1;
      str[3] = 1;
      pos = 4;
      len = 16;
   }
   
   // Fill all but the last number with random values
   while (pos < len-1)
      str[pos++] = Math.floor(Math.random() * 10) % 10; //Post-increment on purpose

   // Calculate the checksum of the values thus far
   len_offset = (len + 1) % 2;
   for (pos = 0; pos < len - 1; pos++) {
      if ((pos + len_offset) % 2) {
         t = str[pos] * 2;
         if (t > 9)
            t -= 9;
         sum += t;
      }
      else 
         sum += str[pos];
   }

   // Based on the checksum of the existing digits, make the last digit validate the checksum, then turn the array into a string
   final_digit = (10 - (sum % 10)) % 10;
   str[len-1] = final_digit;
   t = str.join("");
   t = t.substr(0,len);

   // Output the value
   document.getElementById('cc_num').value = t;
}

