Skip to content

Instantly share code, notes, and snippets.

@hasokeric
Created January 25, 2022 11:05
Show Gist options
  • Save hasokeric/4fbaf213e54a1b21dffdd5f534a957d3 to your computer and use it in GitHub Desktop.
Save hasokeric/4fbaf213e54a1b21dffdd5f534a957d3 to your computer and use it in GitHub Desktop.
Epicor VIN Validation Automotive
// Erp.SerialNo.Update.PRE.ValidateVIN
//
// IsVehicleRefCat? Custom Condition
foreach (var ttSerialRow in ttSerialNo.Where(x => x.Added()))
{
bool isVehiclePart =
(from p in Db.Part.With(LockHint.NoLock)
where p.Company == ttSerialRow.Company
&& p.PartNum == ttSerialRow.PartNum
&& (new List<string>() { "ALTVEH", "COMVEH", "INCVEH", "INTVEH" }).Contains(p.RefCategory)
select p.RefCategory).Any();
return isVehiclePart;
}
return false;
// Check VIN
Func<string, bool> IsValidVIN = _vin =>
{
if (_vin.Length != 17) { return false; }
string map = "0123456789X";
string weights = "8765432X098765432";
string transliterate = "0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ";
int sum = 0;
for (int i = 0; i < 17; ++i)
sum += (transliterate.IndexOf(_vin[i]) % 10) * map.IndexOf(weights[i]);
char checkDigit = map[sum % 11];
return (checkDigit == _vin[8] && _vin.Length == 17 && !System.Text.RegularExpressions.Regex.IsMatch(_vin, "(.)\\1{16}"));
};
foreach (var ttSerialRow in ttSerialNo.Where(x => x.Added()))
{
return IsValidVIN(ttSerialRow.SerialNumber);
}
return false;
// Erp.SelectedSerialNumbers.CreateSerialNum.PRE.ValidateVIN
//
// Part IsVehicleRefCat? Custom Condition
bool isVehiclePart =
(from p in Db.Part.With(LockHint.NoLock)
where p.Company == Session.CompanyID
&& p.PartNum == PartNum
&& (new List<string>() { "ALTVEH", "COMVEH", "INCVEH", "INTVEH" }).Contains(p.RefCategory)
select p.RefCategory).Any();
return isVehiclePart;
// Check VIN
Func<string, bool> IsValidVIN = _vin =>
{
if (_vin.Length != 17) { return false; }
string map = "0123456789X";
string weights = "8765432X098765432";
string transliterate = "0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ";
int sum = 0;
for (int i = 0; i < 17; ++i)
sum += (transliterate.IndexOf(_vin[i]) % 10) * map.IndexOf(weights[i]);
char checkDigit = map[sum % 11];
return (checkDigit == _vin[8] && _vin.Length == 17 && !System.Text.RegularExpressions.Regex.IsMatch(_vin, "(.)\\1{16}"));
};
return IsValidVIN(baseSerialNum);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment