- 17 Mar 2024
- 2 Minuten zu lesen
- Mitwirkende
- Drucken
- DunkelLicht
- pdf
Hoe wordt een ViridiCode hash berekend?
- Aktualisiert am 17 Mar 2024
- 2 Minuten zu lesen
- Mitwirkende
- Drucken
- DunkelLicht
- pdf
Om dit mogelijk te maken heeft NedFox een algoritme ontwikkeld wat een 'hash' maakt van een ViridiCode. Dit is het beste te vergelijken met een controle getal, alleen bevat de ViridiCode hash niet alleen cijfers maar ook letters. De hash code is een 'one way' encryptie, vanuit een hashcode is het niet mogelijk om de originele ViridiCode weer op te bouwen.
De hashcode is niet gegarandeerd uniek, maar dat is ook niet nodig. Het gaat slechts om de herkenbaarheid van een bepaalde ViridiCode. De kans dat iemand ooit een zelfde hash vindt op verschillende ViridiCodes die op hetzelfde moment in de handel zijn is uitermate klein.
Gewenst is om de hashcode te printen op een ViridiCode label, onder of naast de ViridiCode (datamatrix barcode) zelf. De hash wordt berekend op basis van onderstaande .Net code en bestaat uit een MD5 hash die vervolgens Base64 gecodeerd wordt. Onderstaande code gebruikt een voorbeeld ViridiCode, waarbij het resultaat NQLZJHJFAQ moet zijn. Bij het overzetten van deze code naar bijvoorbeeld PHP is het essentieel dat de uitkomst identiek is, anders krijgt men in de winkel ongeldige/niet bestaande hashcodes te zien. Immers, RetailVista rekent deze hashcodes ook zelf weer uit en die zullen dus overeen moeten komen met de etiketten.
Support op deze code wordt uitsluitend in ons online forum gegeven, te vinden op https://forum.nedfox.net
using NedFox.Sdk;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args) {
string viridiCode = "0108719613726796~988718288066800~800920191028144744489~240VBNL41893~427ORNR274614~992EUR2499";
// Expected hash result: NQLZJHJFAQ
// Replace special ViridiCode / 2D barcode separator chars like char 15, 29, ~ and | symbols for 'empty separators'
// Base64 contains 0-9 and A-Z and a-z and + and / chars as possible return values. Replace + en / chars for 9, we want A-Z and 0-9 only!
string base64Result = Encrypt(viridiCode.ToUpper().Replace((char)15, ' ').Replace((char)29, ' ').Replace('~', ' ').Replace('|', ' ').Replace(" ", ""));
// Strip typical Base64 results like ==, + and / chars
string finalHash = base64Result.Replace("==", "").Substring(0, 10).ToUpper().Replace('+', '9').Replace('/', '9');
Console.WriteLine(finalHash);
Console.ReadLine();
}
private static string Encrypt(string text) {
string salt = "NedFox";
string preSalt = salt.Substring(0, salt.Length / 2);
string postSalt = salt.Substring(salt.Length / 2);
MD5CryptoServiceProvider cryptoProvider = new MD5CryptoServiceProvider();
string toEncrypt = preSalt + text + postSalt;
byte[] encrypted = cryptoProvider.ComputeHash(Encoding.UTF32.GetBytes(toEncrypt));
StringBuilder sb = new StringBuilder(encrypted.Length);
sb.Append(System.Convert.ToBase64String(encrypted));
return sb.ToString();
}
}
}