String model = randomCode(fordModelCodes);
String engine = randomCode(fordEngineCodes);
plant = randomCode(fordPlantCodes);
front = pad(manufacturer, 3, "AAAAAAAAAAAAAAAAAA") + restraint + pad(model, 3, "0000000000000000") + engine;
if (verbose) {
r.set("model", new TextNode(fordModels.get(model)));
r.set("engine", new TextNode(fordEngines.get(engine)));
}
break;
}
case "BMW":
case "BMW M": {
String model = randomCode(bmwModelCodes);
plant = randomCode(bmwPlantCodes);
front = pad(manufacturer, 3, "AAAAAAAAAAAAAAAAAA") + restraint + model;
if (verbose) {
r.set("model", new TextNode(bmwModels.get(model)));
r.set("plant", new TextNode(bmwPlants.get(plant)));
}
break;
}
default: {
String model = gibberish(4);
plant = gibberish(1);
front = pad(manufacturer, 3, "AAAAAAAAAAAAAAAAAA") + restraint + model;
break;
}
}
String check = "0";
String rawVin = front + check + yearCode + plant + String.format("%06d", sequence);
String vin = addCheckDigit(rawVin);
if (verbose) {
r.set("VIN", new TextNode(vin));
r.set("manufacturer", new TextNode(makes.get(manufacturer)));
r.set("year", new IntNode(year));
} else {
return new TextNode(vin);
}
return r;
}