public static string Create(SourceSystemType sourceSystem, long unicId) { // 0 - 000000123 - идентификатор объекта // 1 - 00 - код юр лица, всегда 00 // 2 - 01 - код системы от куда пришёл - SourceSystemType // 3 - контрольная цифра // Алгоритм вычисления контрольной цифры: // Начиная с первой значимой цифры(>0), каждой позиции последующей цифры присваивается вес по порядку начиная с 1. // Вычисляется сумма произведений каждой цифры и веса. Последняя цифра в полученной сумме является контрольной цифрой. // 1*1 + 5*2 + 7*3 + 0*4 + 0*5 + 0*6 + 1*7=39 – контрольный символ - 9 const string template = "{0}{1}{2}"; const string legalEntity = "00"; string id = unicId.ToString(); string systemCode = ((long)sourceSystem).ToString("D2"); string barcode = String.Format(template, id, legalEntity, systemCode); long barcodeNumber = long.Parse(barcode); long[] barcodeNumbers = ToDigitArray(barcodeNumber); long checkDigit = barcodeNumbers.Select((t, i) => t * (i + 1)).Sum() % 10; barcode += checkDigit; return(barcode); }
private static SourceSystemType GetSourceSystemType(string barcode) { string sourceSystemStringCode = barcode.Substring(barcode.Length - 3, 2); int sourceSystemCode; if (!int.TryParse(sourceSystemStringCode, out sourceSystemCode)) { return(SourceSystemType.None); } SourceSystemType sourceSystemType = (SourceSystemType)sourceSystemCode; return(sourceSystemType); }