Buchstaben-Zahlencode umschlüsseln/verkürzen

Hi! Habe hier schon öfter mal Antworten auf meine Fragen erhalten, ohne ein Frage stellen zu müssen. Versuche es jetzt mal als „aktiver“ Fragesteller:

Wie kann ich max. 19-stellige Buchenstaben-Zahlenkombinationen (überwiegend Zahlen, jedoch auch Sonderzeichen möglich) in max. 13-stellige reine Buchstaben-Zahlenkombinationen umschlüsseln? Der neu generierte Code sollte natürlich auch wieder entschlüsselbar sein.

Bsp1: CSUDC119103090551062 = ?
Bsp2: EHGF00968A0M = ?

Gibt es dafür entsprechende Software?
Kann ich da selber was in VB/Access „basteln“?
Bin für jeden Lösungsansatz dankbar.

Hallo,

Wie kann ich max. 19-stellige Buchenstaben-Zahlenkombinationen
(überwiegend Zahlen, jedoch auch Sonderzeichen möglich) in
max. 13-stellige reine Buchstaben-Zahlenkombinationen
umschlüsseln?

da müsstest du schon genauer werden: Genau wie sind die Ausgangszeichenfolgen aufgebaut? Welche Zeichen sind erlaubt und wo? (Kommen bestimmte Sonderzeichen z.B. nur an bestimmten Positionen vor? Oder gibt es weitere „Struktur“ in der Zeichenfolge?)

Das gleiche gilt für die 13-stelligen Kombinationen: Erlaubst du nur A-Z und 0-9? Oder auch noch Kleinbuchstaben? Oder …

Der neu generierte Code sollte natürlich auch
wieder entschlüsselbar sein.

Das ist der Knackpunkt. Du möchtest einerseits verkürzen, aber auch die Information erhalten; du suchst also einen verlustfreien Kompressionsalgorithmus. Dafür sind meine Eingangsfragen wichtig: Wenn du z.B. beliebige Buchstaben-Zahlen-Folgen (A-Z, 0-9, ohne weitere Einschränkungen) der Länge 19 hast und möchtest daraus Folgen (auch A-Z, 0-9) der Länge 13 machen, dann ist das ohne Verlust nicht möglich, allein aus dem Grund, dass es viel mehr verschiedene 19-stellige als 13-stellige Folgen gibt.

Viele Grüße,

Andreas

Hallo,

Wie kann ich max. 19-stellige Buchenstaben-Zahlenkombinationen
(überwiegend Zahlen, jedoch auch Sonderzeichen möglich) in
max. 13-stellige reine Buchstaben-Zahlenkombinationen
umschlüsseln?

da müsstest du schon genauer werden: Genau wie sind die
Ausgangszeichenfolgen aufgebaut? Welche Zeichen sind erlaubt
und wo? (Kommen bestimmte Sonderzeichen z.B. nur an bestimmten
Positionen vor? Oder gibt es weitere „Struktur“ in der
Zeichenfolge?)

Danke für die schnelle Rückmeldung!

Struktur der Ausgangszeichenfolge:
Stelle 1-4: A-Z
Stelle 5-19: Länge variabel, Position von Zahlen, Buchstaben und Sonderzeichen variabel, jedoch keine Unterscheidung bei Groß-/Kleinbuchstaben. Kleinbuchstaben sollen als Großbuchstaben interpretiert werden. Auch liessen sich die zulässigen Sonderzeichen auf eine Handvoll reduzieren (-/_. [Leerzeichen]).

Das gleiche gilt für die 13-stelligen Kombinationen: Erlaubst
du nur A-Z und 0-9? Oder auch noch Kleinbuchstaben? Oder …

Ausgabezeichenfolge:
Länge kann variabel sein, ausschließlich bestehend aus 0-9 und A-Z.

Der neu generierte Code sollte natürlich auch
wieder entschlüsselbar sein.

Das ist der Knackpunkt. Du möchtest einerseits verkürzen, aber
auch die Information erhalten; du suchst also einen
verlustfreien Kompressionsalgorithmus. Dafür sind meine
Eingangsfragen wichtig: Wenn du z.B. beliebige
Buchstaben-Zahlen-Folgen (A-Z, 0-9, ohne weitere
Einschränkungen) der Länge 19 hast und möchtest daraus Folgen
(auch A-Z, 0-9) der Länge 13 machen, dann ist das ohne Verlust
nicht möglich, allein aus dem Grund, dass es viel mehr
verschiedene 19-stellige als 13-stellige Folgen gibt.

Mir ist klar, dass dies primär von der Länge der Ausgangszeichenfolge und der darin verwendeten Buchstaben bzw. Sonderzeichnen abhängig ist. Wäre es denn rein mathematisch möglich, eine 13-stellige Ausgabefolge nach o.g. Angaben zu generieren? Ab wieviel Buchstaben bzw. Sonderzeichen in einer Ausgangszeichenfolge wäre es nicht mehr möglich?

Viele Grüße,

Andreas

Viele Grüße
Uwe

Hallo,

Wäre es denn rein mathematisch
möglich, eine 13-stellige Ausgabefolge nach o.g. Angaben zu
generieren?

nein; da braucht man gar nicht lange zu rechnen: Die letzten 13 Stellen deiner Ausgangszeichenfolgen können schon mehr Kombinationen annehmen als dein Ziel. Es ist also unmöglich, eine verlustfreie Abbildung zu finden.

Ab wieviel Buchstaben bzw. Sonderzeichen in einer
Ausgangszeichenfolge wäre es nicht mehr möglich?

Grob anhand des Informationsgehalts überschlagen: Dein Ziel hat 13 Stellen mit 36 möglichen Symbolen (26 Buchstaben + 10 Ziffern). Das sind 36^13 = 2^67.2, also 67.2 Bits Informationsgehalt.

Die führenden 4 Buchstaben deiner Ausgangszeichenfolgen verbrauchen 18.8 Bits, bleiben 48.4 übrig. Das entspricht bei einem angenommenen Zeichenvorrat nach deinen Vorgaben von 26 Buchstaben, 10 Zahlen und 5 Sonderzeichen etwa einer Zeichenkette der Länge 9. (Das heißt, du hast insgesamt wieder 13 Stellen und hast durch die zusätzlichen Sonderzeichen hinten nur den Wegfall der Ziffern vorne aufgefangen.)

Gruß

Andreas

Ich hab das jetzt zwar nicht durchgerechnet aber vielleicht wäre es möglich, wenn man in der Ausgabezeichenfolge noch Kleinbuchstaben erlaubt! Ansonsten ist das wohl wirklich nicht machbar!

Ich hab das jetzt zwar nicht durchgerechnet aber vielleicht
wäre es möglich, wenn man in der Ausgabezeichenfolge noch
Kleinbuchstaben erlaubt!

Reicht auch nicht; dann käme man in der Eingabe nur ca. auf die Länge 4 + 11.

Andreas

Guten Tag,

Ich hab das jetzt zwar nicht durchgerechnet aber vielleicht
wäre es möglich, wenn man in der Ausgabezeichenfolge noch
Kleinbuchstaben erlaubt! Ansonsten ist das wohl wirklich nicht
machbar!

Wäre eine Komprimierung der Zeichenfolge für sich wiederholende Sequenzen eine Alternative (ähnlich einer Dateikomprimierung [ZIP, RAR, etc.])? Die Zeichenfolge EHGF kommt z.B. an der Stelle 1-4 häufiger vor. Meist gibt es innerhalb der Ausgangszeichenfolge sich wiederholende Sequenzen.

Wäre eine Komprimierung der Zeichenfolge für sich wiederholende Sequenzen eine Alternative (ähnlich einer Dateikomprimierung [ZIP, RAR, etc.])? Die Zeichenfolge EHGF kommt z.B. an der Stelle 1-4 häufiger vor. Meist gibt es innerhalb der Ausgangszeichenfolge sich wiederholende Sequenzen.

Hi,

Wäre eine Komprimierung der Zeichenfolge für sich
wiederholende Sequenzen eine Alternative (ähnlich einer
Dateikomprimierung [ZIP, RAR, etc.])?

klar. Was wir bisher geklärt haben, ist ja nur die Theorie: Solange du nicht weitere Einschränkungen der Menge deiner 19-stelligen Zeichenfolgen vornehmen kannst, ist es unmöglich, jede der Zeichenfolgen eindeutig auf eine der genannten 13-stelligen abzubilden.

Meist gibt es
innerhalb der Ausgangszeichenfolge sich wiederholende
Sequenzen.

Was heißt „meist“ konkret?

Vielleicht beschreibst du mal genauer, was es mit diesen Zeichenfolgen praktisch auf sich hat, damit wir besser wissen, was du eigentlich vorhast.

Andreas

Also dann, etwas konkreter:

Ich muss Artikelnummern (ca. 2,5 Mio.) von verschiedenen Lieferanten (ca. 350) in einer SQL-Datenbank pflegen und dokumentieren.

Aufgrund definierte Feldgrößen für einen Datenaustausch über Standardprogramme, ist die maximale Länge einer Artikelnummer auf 15 Stellen begrenzt. Diese Artikelnummern können je Lieferant eine variable Länge besitzen und weiterhin sehr „abenteuerlich“ sein (Zahlen, Buchstaben, sogar Sonderzeichen und mehrfache Leerzeichen innerhalb der Artikelnummer werden hier teilweise verwendet).
Ein Lieferant vergibt entweder chaotische Nummern, dann beträgt die Länge seiner Artikelnummer max. 8 Stellen. Oder er hat sich ein Nummernsystem ausgedacht, um seine Artikelnummer ein Stück weit „sprechen zu lassen“ (z.B: Länge = 0900, Breite = 030, Farbe = we, etc.). Das wären dann die wiederkehrenden Sequenzen. Klar definieren lässt sich dies aber auch nicht, da jeder Lieferant sein eigenes Süppchen kocht und auch mal den selbst gestecken „Codierungspfad“ verlässt.

Da eine Artikelnummer bei verschiedenen Lieferanten durchaus identisch sein kann, gibt es zusätzlich eine Lieferantencodierung (4-stellig, alphanumerisch [A-Z, 0-9]).

Komme somit auf meine max. Länge von 19 Zeichen, die ich zurzeit in zwei verschiedenen Datenfeldern pflege. Für dauerhaft bzw. häufig verwendete Artikel vergebe ich einen eigenen Nummernkreis, der in einem sep. Feld gepflegt wird.

Möchte nun aber von der „statischen“ Artikelpflege weg und Artikelnummern nur noch bei Bedarf anlegen (z.B. im Falle einer Anfrage). Da ich bei der Ausgabe einer eigenen Artikelnummer wiederum an die max. Länge von 15 Zeichen gebunden bin, benötige ich eine Umschlüsselung bzw. Kompression. Es stehen mir statt der 15 Zeichen aber eff. nur 13 zur Verfügung, da ich vorangestellt eine zweistellige Identifikationsnummer benötige, um meinen bereits eigengepfegten Artikelstamm von denen in Laufzeit generierten zu trennen.

Das war jetzt mal in Kürze die konkretisierte Fassung.

Hallo,

Also dann, etwas konkreter:

danke; das macht es deutlich einfacher. Das Problem fällt auch stark in sich zusammen. Jetzt haben wir massig Platz:

Ich muss Artikelnummern (ca. 2,5 Mio.) von verschiedenen
Lieferanten (ca. 350) in einer SQL-Datenbank pflegen und
dokumentieren.

Das ist recht übersichtlich. Von deinen vereinheitlichten 13-stelligen Artikelnummern (ohne Präfix) gibt es 170 Trillionen Stück. Das sollte eine Weile reichen, auch wenn noch einige Lieferanten oder Artikel hinzukommen.

Diese Artikelnummern können je
Lieferant eine variable Länge besitzen und weiterhin sehr
„abenteuerlich“ sein

Ok, dann spricht vieles dafür, für jedes Lieferantenschema eine eigene Abbildung zu definieren, und jedem Lieferanten einen Präfix innerhalb des 13-Zeichen-Raums zuzuweisen, vielleicht 3 Zeichen (reichen 47000 Lieferanten?). Dann bleiben 10 Zeichen für den Artikel pro Lieferant (immer noch 3,6 Billiarden; du könntest also viel weniger Zeichen nehmen und so für Erweiterungen deines Format gewappnet sein).

Bleibt allerdings evtl. noch der Aufwand, 350 Abbildungen zu definieren.

Ein Lieferant vergibt entweder chaotische Nummern, dann
beträgt die Länge seiner Artikelnummer max. 8 Stellen.

Diese Artikelnummern könntest du eins zu eins übernehmen, oder du gehst wie bei den längeren vor.

Oder er hat sich ein Nummernsystem ausgedacht, um seine Artikelnummer
ein Stück weit „sprechen zu lassen“

Da das kaum zu erfassen ist (und, wie du sagt, jeder Lieferant seine eigenen Regeln durch Ausnahmen verletzt), und vorausgesetzt, die generierten Artikelnummern benötigen keine „sprechende“ Struktur, böte sich eine einfache Durchnumerierung des Artikelbestandes an.

Da eine Artikelnummer bei verschiedenen Lieferanten durchaus
identisch sein kann, gibt es zusätzlich eine
Lieferantencodierung (4-stellig, alphanumerisch [A-Z, 0-9]).

Ein Lieferantencode existiert also schon. Dann wäre meines Erachtens die pragmatischte Lösung: Übernimm den 4-stelligen Lieferantencode und generiere innerhalb eines Lieferanten neue Artikelnummern, die du den alten über die DB zuordnest. Entweder nimmst du eine feste Länge (5 Zeichen = 60 Mio. Produkte reichen wahrscheinlich völlig) oder du lässt die Nummern in ihrer Länge einfach wachsen.

Falls deine Artikelnummern auch von Menschen notiert/weitergegeben werden, solltest du dir vielleicht noch Gedanken über eine Absicherung gegen Schreibfehler machen (per Prüfsumme; Vermeidung von ähnlich aussehenden Buchstaben (Null und Oh, Eins und Ih, etc.).

Viele Grüße,

Andreas