![]() |
Kundennummer aus Buchstaben und Zahlen erstellen
Hi Leute!
Ich habe folgendes Problem. Ich muss eine fortlaufende Kundennummer aus Buchstaben und Zahlen erstellen. Ich habe mir das so gedacht, dass ich mit der Kundennummer A001 anfange, dann weiter mit A002 bis Z999 gehe. Danach soll es weiter mit AA001, AA002 bis ZZ999 gehen. Nun weiß ich leider nicht, wie ich das per Quellcode realisieren soll. Kann mir jemand helfen? MfG Voltzi |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Wie lernt man in der Schule zu addieren?
Code:
1. Von rechts anfangen. (i=1)
2. Wenn i> Länge(Nummer) dann Hänge ein 'A' vorne an die Nummer an Sonst Wenn Nummer[i]=höchste Ziffer dann Nummer[i] := Kleinste Ziffer inc (i) Wiederhole Schritt 2 sonst inc (Nummer[i]) |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Danke für deine Hilfe. Hat sich aber schon erledigt.
MfG Voltzi |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
du solltest dir jedenfalls überlegen ob das günstig ist fürs sortieren!
Code:
wird aufsteigend sortiert zu
a001
a002 b001 b002 aa001 aa002 bb001 ab001
Code:
a001
a002 aa001 aa002 ab001 b001 b002 bb001 |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Hallo,
in der Regel macht man das per "K" (Kreditor) oder "D" (Debitor). Also z.B. K123456 oder D546765 So kann man gleich anhand des Buchstabens erkennen, ob es ein Kunde oder Lieferant ist. Wenn nur Nummern gewünscht sind, ist der Kunde meist 1,2,3,4,5,6 und der Lieferant >6. Also Kunde = 123456 Lieferant = 789101 |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Hallo Voltzi,
mit einem so vorbildlich formulierten Titel für einen thread lohnt sich später auch die Suchfunktion. Die Schlüssel AA001 .. ZZ999 ergeben einen Schlüsselvorrat von 26 * 26 * 1000 - 1 Schlüsseln. Hier eine Abbildungsfunktion:
Delphi-Quellcode:
Grüße vom marabu
function CompoundKey(iKey: cardinal; iDigits: integer): string;
var i, iRange: cardinal; begin iRange := 10; for i := 2 to iDigits do iRange := iRange * 10; Result := IntToStr(iKey mod iRange); while Length(Result) < iDigits do Result := '0' + Result; iKey := iKey div iRange; Result := Chr(iKey mod 26 + Ord('A')) + Result; iKey := iKey div 26; Result := Chr(iKey mod 26 + Ord('A')) + Result; end; |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Ab jetzt wird geklugscheissert: :nerd:
Volzi wollte 'A001'..'Z999','AA000','ZZ999' und nicht 'AA001'..'ZZ999' @marabu: 6! Setzen! Nachsitzen! :warn: Nee, im Ernst: Ich bevorzuge auch Nummern mit konstanter Länge, insofern ist deine Abbildung natürlich ok. |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Hallo alzaimar,
ich habe meinen Code bewusst nicht an die Anforderung von Voltzi angepasst, weil ich auf die Macht des Faktischen zählen wollte. Durch Hinzunahme des Schlüsselbereichs A001 .. Z999 vergrößert man ohne Zweifel den Schlüsselvorrat, aber die von dir und anderen betonten Nachteile überwiegen doch bei weitem. Ich würde dann wohl eher zu AAA001 .. ZZZ999 greifen. Aber wer kennt schon die genauen Anforderungen? Nur als technische Spielerei - eine kleine Änderung der letzten Zeile:
Delphi-Quellcode:
Freundliche Grüße vom marabu
if iKey > 0 then
Result := Chr(Pred(iKey) mod 26 + Ord('A')) + Result; |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Wenn die Reihenfolge "erst einige Buchstaben, danach Ziffern" nicht unbedingt notwendig ist, genügen sechs Hex-Ziffern für einen Schlüsselvorrat von 16^6 =~ 16 Mio., und außerdem werden "politisch sensible" Buchstabenkombinationen verhindert.
|
Re: Kundennummer aus Buchstaben und Zahlen erstellen
@marabu: Nee, is schon klar, aber manchmal will man einfach mal seinen Senf hinzugeben.
@BKempf: Ich weiss nich, ob man sich darüber noch Gedanken machen sollte. Dann dürfte ja auch die Funkzentrale, die ich gerade programmiere, politisch unsensibel sein. Und Wasser erst recht (Hupsa! nicht rechts!). Buchstabensalatkundennummern sind ohnehin Unsinn. Wer will schon FUK007 heissen. Und mit HEX-Zahlen ginge das auch: FAC007 :-D. Dessenungeachtet will ich die Firma sehen, die 16. Mio Kunden ihr eigen nennt und sich nicht mal 8 stellige numerische Kundennummern leisten will/kann. Aber, da kommt man vom Hundersten ins Tausendste: Will ich als Kunde die Nr. 69 (obwohl meine Frau nicht drauf steht?) oder die 666, obwohl ich Muslime bin? Dann stell ich mich lieber naiv (oder vernünftig, je nach Sichtweise) und beanspruche die Gnade der späten Geburt sowie Scheuklappen für mich. |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
@alzaimar:
Buchstabenpaare als Wortbestandteile wird es immer geben; ich bezog mich eher auf automatisch erzeugte Gruppen aus zwei Buchstaben am Anfang einer Zeichenkette, die ansonsten nur aus Ziffern besteht. Mit den von dir beanspruchten Scheuklappen hast du imho zwar (zumindest teilweise) recht, da es immer irgendjemanden gibt, der Anstoß an einer Sache (oder eben Abkürzung) nimmt. Allerdings hielt ich es für wichtig, auf Randprobleme aufmerksam zu machen, die in bestimmten Situationen entstehen können und die z.B. bestimmte Kundengruppen unnötig verärgern könnten (wenn sie eine der Anstoß erregenden Kundennummern zugeteilt bekommen). Bei der Verwendung von Buchstaben läuft man immer Gefahr, plötzlich Mehrdeutigkeiten zu bekommen, die weder gewollt noch förderlich sind (Kundennummer 45054 von Dezimal nach Hex, um bei meinem Beispiel aus dem vorigen Posting zu bleiben :) ). Nur - je größer das zugelassene Alphabet wird, aus dem die IDs zusammengebastelt werden, desto größer ist auch die Gefahr der Kollision eines Substrings mit einem Wort aus einer beliebigen schwarzen Liste. Meine persönliche Meinung ist, daß bedenkliche Buchstabengruppen möglichst umgangen werden sollten, und zwar allein, um eventuellen Problemen von vornherein vorzubeugen (und je größer der potentielle Imageschaden wäre, desto mehr Aufwand sollte getrieben werden, um solche Gruppen zu finden). Damit scheidet natürlich aufgrund des Affen auch meine Hexerei aus (bei der ich davon ausging, daß nur begrenzt viele Stellen für eine ID zur Verfügung stehen, weshalb ich diesen Kompromiß einging). Wenn genug Platz zur Verfügung steht, würde ich die Dezimalzahlen jedem anderen Zahlensystem vorziehen, weil es einfach das am weitesten verbreitete ist und so oft verwendet wird, daß kaum jemand auf die Idee käme, irgendetwas in fortlaufende Zahlen hineinzuinterpretieren. Was das betrifft, gebe ich dir natürlich recht, daß sich inzwischen jede Firma hinreichend viele Dezimalstellen plus 'D', 'K' oder sonstige Flags leisten kann, so daß Byteschnipselei überflüssig ist. Steht weniger Platz zur Verfügung, muß Hex reichen. Das Affenproblem bleibt ungelöst. Andere Buchstabenkombinationen würde ich zwar unter Umständen auch einsetzen, aber wie erwähnt vorsichtiger als Dezimal oder Hex, weil sie automatisch als Wörter gelesen würden. Im Grunde ist das alles sowieso eine Frage der persönlichen Einstellung oder, je nach Sichtweise, der Paranoia. Ich für meinen Teil bin da, wo es problemlos möglich ist, kaum Aufwand kostet und mir zufällig auffällt, möglichst paranoid, um solche Klippen (und seien sie auch noch so unwahrscheinlich, klein oder scheinbar belanglos) zu umschiffen - eine Sache der Kosten-Nutzen-Rechnung. Wie auch immer, ich denke, daß das hier zu weit führt und vor allem offtopic wird (was man aus einem Nebensatz so alles machen kann... :shock: ). Das ursprüngliche Problem ist vermutlich mit Catbytes' erstem Vorschlag am elegantesten gelöst, vorausgesetzt die paar Bytes mehr stehen zur Verfügung. |
Re: Kundennummer aus Buchstaben und Zahlen erstellen
Mann, hab ich Glück, das ich nicht von paranoiden 'political correctness' nachäffenden Kunden umgeben bin. Obwohl, AFFE will ich auch nicht sein. Ich korrigiere mich: Mann, hab ich ein Glück, das ich keine Kunden mit Kundennummern habe.
Wirklich ein Thema für sich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz