Password generator: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring, marked p2js compatible) |
(Applesoft BASIC) |
||
Line 672: | Line 672: | ||
+@pyJ'3YQ'%~9?Tm/BHk?A</pre> |
+@pyJ'3YQ'%~9?Tm/BHk?A</pre> |
||
=={{header|Applesoft BASIC}}== |
|||
<lang Applesoft>1 N=1 |
|||
2 L=8 |
|||
3 M$=CHR$(13) |
|||
4 D$=CHR$(4) |
|||
5 S$(0)="S" |
|||
6 F$="A FILE" |
|||
7 C$(1)=" (CURRENT OPTION)" |
|||
8 DEF FN R(T)=ASC(MID$(G$(T),INT(RND(1)*LEN(G$(T))+1),1)) |
|||
9 GOSUB 750 |
|||
10 FOR Q = 0 TO 1 STEP 0 |
|||
20 GOSUB 50CHOOSE |
|||
30 NEXT Q |
|||
40 END |
|||
REM *** CHOOSE *** |
|||
50 PRINT M$M$"1 GEN 2 DISP 3 FILE 4 LEN 5 NUM 6 SEED" |
|||
60 PRINT "7 CHR 8 HELP 9 QUIT "CHR$(10)"CHOOSE AN OPTION: "; |
|||
70 GET K$ |
|||
75 IF K$ > CHR$(95) THEN K$ = CHR$(ASC(K$) - 32) |
|||
80 PRINT K$ |
|||
85 ON VAL(K$) GOTO 100,200,300,400,500,600,700,800,900 |
|||
90 GOTO 210OPTIONS |
|||
REM *** GENERATE *** |
|||
100 PRINT M$ |
|||
105 IF L > 32 THEN PRINT "UM... OK, THIS MIGHT TAKE A BIT."M$ |
|||
110 GOSUB 340OPEN |
|||
115 FOR P=1 TO N |
|||
120 P$="" |
|||
125 FOR I=1 TO L |
|||
135 P$=P$+CHR$(FNR(I*(I<5))) |
|||
140 NEXT I |
|||
REM SHUFFLE FIRST 4 |
|||
150 FOR I = 1 TO 4 |
|||
151 C$=MID$(P$,I,1) |
|||
152 J=INT(RND(1)*L)+1 |
|||
153 H$=MID$(P$,J,1) |
|||
154 P$=MID$(P$,1,J-1)+C$+MID$(P$,J+1,L) |
|||
155 P$=MID$(P$,1,I-1)+H$+MID$(P$,I+1,L) |
|||
156 NEXT I |
|||
180 PRINT P$ |
|||
185 NEXT P |
|||
190 GOTO 380CLOSE |
|||
REM *** DISPLAY *** |
|||
200 C = 0 |
|||
REM *** OPTIONS *** |
|||
210 HOME |
|||
215 PRINT "PASSWORD GENERATOR"M$M$ |
|||
220 PRINT "1. GENERATE "N" PASSWORD"S$(N=1)M$ |
|||
225 PRINT "2. DISPLAYED"C$(C=0)M$" OR" |
|||
230 PRINT "3. WRITTEN TO "F$C$(C=1)M$ |
|||
235 PRINT "4. SPECIFY THE PASSWORD LENGTH = "L;M$ |
|||
240 PRINT "5. SPECIFY THE NUMBER OF PASSWORDS TO"M$TAB(31)"GENERATE" |
|||
245 PRINT "6. SPECIFY A SEED VALUE"M$ |
|||
250 PRINT "7. EXCLUDE VISUALLY SIMILAR CHARACTERS"M$ |
|||
255 PRINT "8. HELP AND OPTIONS" |
|||
260 RETURN |
|||
REM *** WRITE TO A FILE *** |
|||
300 C = 1 |
|||
310 GOTO 210OPTIONS |
|||
REM *** OPEN A FILE *** |
|||
340 IF NOT C THEN RETURN |
|||
345 PRINT D$"OPEN "F$" |
|||
350 PRINT D$"CLOSE"F$ |
|||
355 PRINT D$"DELETE "F$ |
|||
360 PRINT D$"OPEN "F$ |
|||
365 PRINT D$"WRITE "F$ |
|||
370 RETURN |
|||
REM *** CLOSE A FILE *** |
|||
380 IF NOT C THEN RETURN |
|||
385 PRINT D$"CLOSE"F$ |
|||
390 RETURN |
|||
REM *** SET PASSWORD LENGTH *** |
|||
400 PRINT M$ |
|||
410 FOR I = 0 TO 1 STEP 0 |
|||
420 INPUT "ENTER A NUMBER FROM 4 TO 255 TO SPECIFY THE PASSWORD LENGTH = ";L |
|||
430 IF L >= 4 AND L < 256 THEN RETURN |
|||
440 PRINT "?OUT OF RANGE" |
|||
450 NEXT I |
|||
REM *** SET NUMBER OF PASSWORDS TO GENERATE *** |
|||
500 PRINT M$ |
|||
510 FOR I = 0 TO 1 STEP 0 |
|||
520 INPUT "ENTER A NUMBER FROM 1 AND UP TO SPECIFY THE NUMBER OF PASSWORDS TO GENERATE: ";N |
|||
530 IF N >= 1 THEN RETURN |
|||
540 PRINT "?OUT OF RANGE." |
|||
550 NEXT I |
|||
REM *** SET A SEED VALUE *** |
|||
600 PRINT M$ |
|||
610 INPUT "ENTER A SEED VALUE: ";S% |
|||
620 PRINT RND(S%) |
|||
630 RETURN |
|||
REM *** EXCLUDE *** |
|||
700 PRINT M$ |
|||
705 INPUT "ENTER CHARACTERS TO EXCLUDE:";E$ |
|||
REM *** GROUPS *** |
|||
REM ALWAYS EXCLUDE BACKSLASH AND BACKTICK (GRAVE) |
|||
710 E$=CHR$(92)+CHR$(96)+E$ |
|||
711 FOR G = 1 TO 4 |
|||
712 G$(G) = "" |
|||
713 NEXT G |
|||
720 FOR G = 1 TO 2 |
|||
721 FOR K = ASC("A") + (G - 1) * 32 TO ASC("Z") + (G - 1) * 32 |
|||
722 GOSUB 770ADD |
|||
723 NEXT K, G |
|||
730 FOR K = 33 TO 64 |
|||
731 G = 3 + (K < ASC(STR$(0)) OR K > ASC(STR$(9))) |
|||
732 GOSUB 770ADD |
|||
733 NEXT K |
|||
734 FOR K = 91 TO 96 |
|||
735 GOSUB 770ADD |
|||
736 NEXT K |
|||
737 FOR K = 123 TO 126 |
|||
738 GOSUB 770ADD |
|||
739 NEXT K |
|||
740 G$(0) = "" |
|||
741 FOR G = 1 TO 4 |
|||
742 IF LEN(G$(G)) THEN G$(0) = G$(0) + G$(G) : NEXT G : GOTO 800HELP |
|||
743 ?"THERE MUST BE AT LEAST ONE CHARUNRACTER IN EACH GROUP" |
|||
744 GOTO 705 |
|||
REM *** DEFAULT (QUICK) *** |
|||
750 G$(1)="ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
751 FOR I=97TO122:G$(2)=G$(2)+CHR$(I):NEXT |
|||
753 G$(3)="0123456789" |
|||
754 G$(4)="!"+CHR$(34)+"#$%&'()*+,-./:;<=>?@"+CHR$(91)+"]^"+CHR$(95) |
|||
755 FOR I=123TO126:G$(4)=G$(4)+CHR$(I):NEXTI |
|||
756 G$(0)=G$(0)+G$(1)+G$(2)+G$(3) |
|||
757 GOTO 210OPTIONS |
|||
REM *** ADD TO GROUP |
|||
770 C$ = CHR$(K) |
|||
775 FOR E = 1 TO LEN(E$) |
|||
780 IF C$ <> MID$(E$,E,1) THEN NEXT E : G$(G)=G$(G)+C$ : ?C$; |
|||
790 RETURN |
|||
REM *** HELP *** |
|||
800 HOME |
|||
805 PRINT "GENERATE PASSWORDS CONTAINING RANDOM" |
|||
810 PRINT "ASCII CHARACTERS FROM THESE GROUPS:"M$ |
|||
815 PRINT " LOWERCASE UPPERCASE DIGIT OTHER"M$ |
|||
820 PRINT " "LEFT$(G$(2),9)TAB(13)LEFT$(G$(1),9)TAB(23)LEFT$(G$(3),5)TAB(29)LEFT$(G$(4),11) |
|||
825 PRINT " "MID$(G$(2),10,9)TAB(13)MID$(G$(1),10,9)TAB(23)MID$(G$(3),6,5)TAB(29)MID$(G$(4),12,11) |
|||
826 PRINT " "MID$(G$(2),19,9)TAB(13)MID$(G$(1),19,9)TAB(29)MID$(G$(4),23,15)M$ |
|||
840 PRINT "YOU MAY CHOOSE THE PASSWORD LENGTH, AND" |
|||
845 PRINT "HOW MANY PASSWORDS TO GENERATE. IT IS" |
|||
850 PRINT "ENSURED THAT THERE IS AT LEAST ONE" |
|||
855 PRINT "CHARACTER FROM EACH OF THE GROUPS IN" |
|||
860 PRINT "EACH PASSWORD. THERE IS AN OPTION TO" |
|||
865 PRINT "EXCLUDE VISUALLY SIMILAR CHARACTERS." |
|||
870 RETURN |
|||
REM *** QUIT *** |
|||
900 Q = 1 |
|||
910 VTAB 23 |
|||
920 RETURN</lang> |
|||
=={{header|Arturo}}== |
=={{header|Arturo}}== |
||