Hoe wordt een ViridiCode hash berekend?
  • 17 Mar 2024
  • 2 Minuten zu lesen
  • Mitwirkende
  • Dunkel
    Licht
  • pdf

Hoe wordt een ViridiCode hash berekend?

  • Dunkel
    Licht
  • pdf

The content is currently unavailable in German. You are viewing the default Dutch version.
Artikel-Zusammenfassung

<span class="fr-marker" data-id="0" data-type="true" style="display: none; line-height: 0;"></span><span class="fr-marker" data-id="0" data-type="false" style="display: none; line-height: 0;"></span<span class="fr-marker" data-id="0" data-type="true" style="display: none; line-height: 0;"></span><span class="fr-marker" data-id="0" data-type="false" style="display: none; line-height: 0;"></span>De ViridiCode barcode is vrij lang en kan daarom niet als volledige leesbare tekst nog eens onder een  barcode vermeld worden, iets wat wel normaal is bij standaard barcodes zoals Ean8 en Ean13. Toch is het noodzakelijk om de barcode te herkennen, bijvoorbeeld om uit een lijst van barcodes de juiste te kiezen om er een aanbieding op te zetten.

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();

        }

    }

}


War dieser Artikel hilfreich?

Changing your password will log you out immediately. Use the new password to log back in.
First name must have atleast 2 characters. Numbers and special characters are not allowed.
Last name must have atleast 1 characters. Numbers and special characters are not allowed.
Enter a valid email
Enter a valid password
Your profile has been successfully updated.